sql >> Database teknologi >  >> RDS >> Mysql

Byg dynamisk en forberedt erklæring med call_user_func_array()

Jeg forstår ikke, hvilke måder du har prøvet, men jeg vil prøve at svare:

ifølge bind_param manual :

første argument for bind_param er en streng , som 'ssss' .

andet og andre argumenter - er værdier, der skal indsættes i en forespørgsel.

Så din $a_params array skal ikke være

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"

Se? Alle værdier er strenge. Og pladsholdertyper er den første.

Tag også hensyn til rækkefølgen af ​​argumenter i $a_params skal være den samme som rækkefølgen af ​​parametre i bind_param . Dette betyder, dvs. $a_params synes godt om

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

er forkert. Fordi det første element i $a_params vil være det første argument for bind_param og i dette tilfælde er det ikke en "ssss" streng.

Så det betyder, at efter du har udfyldt $a_params med værdier skal pladsholdernes streng tilføjes til begyndelsen af ​​$a_params , med array_unshift for eksempel:

// 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);

Hvis dette ikke virkede, kan du henvise til en del af svaret, du har givet , hvor værdierne for $a_params sendes med henvisning til et andet array $tmp , i dit tilfælde kan du prøve noget 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. Sådan kører du flere opdateringsforespørgsler i en enkelt sætning i PHP og mySQL

  2. Sådan tilføjer du en underformular til en formular i Access 2016

  3. Sådan omdøbes en tabelkolonne i Oracle 10g

  4. Tilpas Spotlight Cloud Alarmer