2016-09-27 5 views
1

Ich versuche, eine SQL-Anweisung mit unbekannter Menge von Parametern vorzubereiten! Diese Parameter sind in einem Array Vergangenheit. Die normale Syntax für die Funktion wäre:Übergeben eines Array als Argumente in PHP

$stmt->bind_param("string of types",param1,param2,...,paramN) 

Das Problem ist, ich weiß nicht, wie Parameter in der Funktion hinzuzufügen $ stmt-> bind_param aus einem Array

ich diesen Code, aber es funktioniert nicht Arbeit:

$ request ['params'] enthält die richtigen Parameter, die in der Funktion hinzugefügt werden müssen.

Aber die call_user_func_array gibt mir diese Fehlermeldung:

call_user_func_array() expects parameter 1 to be a valid callback, function '$stmt->bind_param' not found or invalid function.

Ich denke call_user_func_array nicht die richtige Funktion nutzen zu können! Ich googelte stundenlang, konnte aber für dieses kleine Problem keine Lösung finden.

+1

Bitte lesen Sie [die Dokumentation] (http://php.net/call_user_func_array) über die Funktionen, die Sie verwenden. Beachten Sie, dass die Beispiele zeigen, wie Sie Objektmethoden über diese Funktion korrekt aufrufen. –

Antwort

1

Versuchen Sie so etwas wie:

call_user_func_array(array($stmt,'bind_param'),$request['params']); 
+0

Danke! Das Problem ist, gibt es einen Wert und keine Referenz: Parameter 2 zu mysqli_stmt :: bind_param() erwartet, dass eine Referenz, Wert gegeben –

+0

Gelöst es! Ich benutzte 'call_user_func_array (array ($ stmt, 'bind_param'), refValues ​​($ request ['params']));' Mit dieser Funktion kam ich ins Internet: 'function refValues ​​($ arr) { if (strnatcmp (phpversion(), '5.3')> = 0) // Referenz ist erforderlich für PHP 5.3+ { $ refs = array(); foreach ($ arr als $ key => $ wert) $ refs [$ key] = & $ arr [$ key]; return $ refs; } Rückgabe $ arr; } ' –

2

Um eine Methode als Callback-Parameter call_user_func_array zu verwenden, ein Array mit dem Objektnamen und den Namen der Methode darin als Callback-Parameter zu verwenden.

prüfen call_user_func_array Dokumentationsseite für weitere Erläuterungen PHP: http://php.net/manual/pt_BR/function.call-user-func-array.php

// Call the $foo->bar() method with 2 arguments 
$foo = new foo; 
call_user_func_array(array($foo, "bar"), array("three", "four")); 
3

Wenn Sie 5.6+ PHP sind, könnten Sie auch eher die splat Operator als call_user_func_array, z.B.

$stmt->bind_param($types, ...$request['params']); 

Dies wäre ordentlicheres für Ihren Anwendungsfall, da ein anfängliches Argument gibt es zu bind_param, die sonst benötigen würden shift -ed auf der Vorderseite des Array von Argumenten zu sein.

+0

Ich benutze nicht 5.6+! Weil es nur ein Test auf einem USB-Webserver ist und das ist 5.2, aber Ihre Lösung wäre die beste, wenn ich diese Version hätte –

Verwandte Themen