mysqli->bind_param dynamisch variablen übergeben

rayphi

Mitglied
ich bin grade dabei mir einen kleinee SQLInsertGenerator Klasse zu basteln
dabei möchte ich natürlich auch das ich die parameter dynamisch übergeben...
es funktioniert auch soweit nur das mir nun sagt

Warning: mysqli_stmt::bind_param() [function.mysqli-stmt-bind-param]: Number of elements in type definition string doesn't match number of bind variables in /home/www/scapula/ato/xmasgame_2010/_produktion/_entwicklung/dev_rt/OO/classes/SQLInsertGenerator.class.php on line 73

(wenn ich die werte manuel eintrage gehts!)

PHP:
    $type ='sss'
    $var = 'test1';
    $var2 = 'test2'
    $var3 = 'test3';
    $arr = Array($var, $var2, $var3);
    $mysqli->bind_param($type, implode(',' $arr));
 
Hey,
Danke für die schnelle Antwort. Soweit hab ich mir das auch schon gedacht und somit ist halt genau das mein problem...
Gibt es da eine Lösung oder funktion für damit die bind_param funktion merkt das ich da mehr übergeben möchte als nur einen String?

Mit bestem Gruß,
Rayphi
 
[phpf]mysqli_stmt_bind_param[/phpf]

Im Beispiel steht die richtige Syntax doch drin?

PHP:
$stmt->bind_param('sssd', $var1, $var2, $var3, $var4);
 
Ja ich weiß aber nicht ob ich nur $var1 habe oder ob ich $var1 bis $var15 habe ich möchte ja wie schon anfangs erwähnt :
die parameter dynamisch übergeben

und ich weiß nicht wie ich die dynamische anzahl an variablen in die bind_param funktion übergeben kann
 
Du hast da einen Denkfehler drin. Implode() liefert dir aus X Element EINEN String, von daher muss nur ein s in $type stehen.
 
Hm...
Und dann speichert der auch die Daten die in den entsprechenden variablen stehen in die Datenbank?
(hab den Code grad nicht hier kann’s also nicht testen)
wenn ja dann finde ich das einerseits gut das es so eine einfache Lösung ist aber andrerseits irgendwie unschön da ich ja nun schon mal die Möglichkeit bekomme die Werte als integer, double, string und blob zu spezifizieren und somit würde dies dann theoretisch wieder hinfällig sein!?
 
Also ich hab mal ein paar vorschläge getestet das mit dem $type = 's' funktioniert nicht da die bind_param funktion:
  1. genausoviele variablen haben möchte wie auch im prepeared statement stehen
  2. genausoviele variablen wie typen deklarationen da sind
  3. und soviele typen wie auch variablen da sind

wenn mein insert befehl ungefähr so aussieht
PHP:
$query='INSERT INTO `table` (`columnString`, `columnInteger`) VALUES (?, ?)'
müsste in meinem $type ='si' stehen und irgendwie (Problem worum es sich hier dreht) müsste man nun dynamisch $columnString und $columnInteger (alternativ auch var[0], var[1]) in die bind_param funktion schreiben
 
Zuletzt bearbeitet:
Okay, dann nehmen wir einen kleinen Umweg...

PHP:
// expects 'si'
$query='INSERT INTO `table` (`columnString`, `columnInteger`) VALUES (?, ?)';
$type = 'si';
$param = array('string', '123');

call_user_func_array('mysqli_stmt_bind_param', array_merge (array($query, $type), $param));

So sollte es funktionieren...

Das Beispiel ist aus den Kommentaren der Funktion und auf deinen Code minimal angepasst.
 
I love it... :D

Danke sehr hast eine klammer vergessen ;)
PHP:
call_user_func_array('mysqli_stmt_bind_param', array_merge (array($query, $type), $param));

PS: nächstes mal schau ich mir auch die kommentare in der doku etwas genauer an ;) :rolleyes:
 
Zurück