sql >> Databáze >  >> RDS >> Mysql

Dynamicky vytvořte připravený příkaz pomocí call_user_func_array()

Nechápu, jaké způsoby jste zkoušel, ale pokusím se odpovědět:

podle bind_param manual :

první argument parametru bind_param je řetězec , například 'ssss' .

druhý a další argumenty – jsou hodnoty, které mají být vloženy do dotazu.

Takže vaše $a_params pole by nemělo

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

Ale:

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

Vidět? Všechny hodnoty jsou řetězce. A typy zástupných symbolů jsou první.

Vezměte také v úvahu pořadí argumentů v $a_params musí být stejné jako pořadí parametrů v bind_param . To znamená, že, tj. $a_params jako

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

je špatně. Protože první prvek $a_params bude prvním argumentem bind_param a v tomto případě to není "ssss" řetězec.

To znamená, že po vyplnění $a_params s hodnotami by měl být řetězec zástupných symbolů přidán na začátek $a_params , s array_unshift například:

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

V případě, že to nefungovalo, můžete se podívat na část odpovědi, kterou jste poskytli , kde hodnoty $a_params jsou předány odkazem na jiné pole $tmp , ve vašem případě můžete zkusit něco jako:

// 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. Úvod do Storage Spaces Direct pro SQL Server

  2. Win7 MINGW QT MySQL program křičí nemůže najít -lqsqlmysqld; kde je chybějící knihovna?

  3. Nejčastější dotazy o JAVA/JRE v Oracle Apps

  4. Jak mohu připojit databázi mysql a vložit do ní data pomocí kódu Android