sql >> Databasteknik >  >> RDS >> Mysql

Bygg dynamiskt ett förberett uttalande med call_user_func_array()

Jag förstår inte vilka sätt du har försökt, men jag ska försöka svara:

enligt bind_param manual :

första argumentet för bind_param är en sträng , som 'ssss' .

andra och andra argument - är värden som ska infogas i en fråga.

Så, din $a_params array ska vara inte

0:"New Zealand"
1:"Grey Lynn"
2:"Auckland"
3:"Auckland"
4:array(4)
0:"s"
1:"s"
2:"s"
3:"s"

Men:

0:"ssss"
1:"New Zealand"
2:"Grey Lynn"
3:"Auckland"
4:"Auckland"

Ser? Alla värden är strängar. Och typ av platshållare är den första.

Ta också hänsyn till den ordningen av argument i $a_params måste vara samma som parametrarnas ordning i bind_param . Detta betyder att, dvs. $a_params gillar

0:"New Zealand"
1:"Grey Lynn"
2:"Auckland"
3:"Auckland"
4:"ssss"

är fel. Eftersom det första elementet i $a_params kommer att vara det första argumentet för bind_param och i det här fallet är det inte en "ssss" sträng.

Så detta betyder att efter att du fyllt i $a_params med värden ska platshållarnas sträng läggas till i början av $a_params , med array_unshift till exempel:

// make $a_param_type a string
$str_param_type = implode('', $a_param_type);

// add this string as a first element of array
array_unshift($a_params, $str_param_type);

// try to call
call_user_func_array(array($stmt, 'bind_param'), $a_params);

Om detta inte fungerade kan du hänvisa till en del av svaret du angav , där värden för $a_params skickas med referens till en annan array $tmp , i ditt fall kan du prova något som:

// make $a_param_type a string
$str_param_type = implode('', $a_param_type);

// add this string as a first element of array
array_unshift($a_params, $str_param_type);

$tmp = array();
foreach ($a_params as $key => $value) {
    // each value of tmp is a reference to `$a_params` values
    $tmp[$key] = &$a_params[$key];  
}

// try to call, note - with $tmp, not with $a_params
call_user_func_array(array($stmt, 'bind_param'), $tmp);


  1. En kortare icke-upprepande alfanumerisk kod än UUID i MySQL

  2. Wordnet sqlite Synonymer och exempel

  3. hur man tillåter användare som är inloggade att UPPDATERA/REDIGERA sina profilinställningar/information

  4. Vad betyder parametern TINYINT(parameter)?