prepared statement
marcus
- php
0 dedlfix
hi zusammen!
hab da ein problem mit prepared statements in zusammenhang mit der mysqli erweiterung.
ich habe folgendes statement:
update test set vorname=?, alter=? where id=1
folglich muss man folgenden befehl benutzen, um die parameter an das statement zu binden:
$stmt->bind_param("si", $vorname, $alter);
das funktioniert auch recht gut, ABER ich will in meinem code nicht vorher schon für alle sql-befehle den php-code entwickeln... ich will ihm dynamisch eine liste von parametern übergeben (also "$vorname" und "$alter" ersetzen). den typen "si" dynamisch aufzubauen ist ja kein problem, aber wie gebe ich ihm beim bind_param() mit EINER variable n parameter mit?
ich habe zig sachen ausprobiert und bekomme immer den fehler "Number of elements in type definition string doesn't match number of bind variables"
hat jemand das problem schon gelöst oder eine idee wie man das regeln kann?
vielen dank im voraus
gruß
marcus
echo $begrüßung;
wie gebe ich ihm beim bind_param() mit EINER variable n parameter mit?
call_user_func_array() bietet sich dafür an. Baue die Parameterliste für $stmt->bind_param() (types, var1, var2...) in einem Array zusammen, das du als zweiten Parameter übergibst. Als erster muss ein callback übergeben werden. Einfache Funktionsnamen werden als String übergeben. Wenn man aber die Methode eines Objektes ansprechen möchte muss man ein spezielles Array übergeben: array($stmt, 'bind_param')
Zusammengesetzt ergibt das:
~~~php
$parameters = array('si');
$parameters[] = $param1;
$parameters[] = $param2;
...
call_user_func_array(array($stmt, 'bind_param'), $parameters);
echo "$verabschiedung $name";
P.S: Unter PHP4 musste man für den callback das Objekt als Referenz übergeben, wenn man nicht mit einer Kopie arbeiten wollte: array(&$stmt, 'bind\_param'). Unter PHP5 wird bei Objekten immer eine Referenz übergeben.