2017-06-20 4 views
-1

Ich weiß nicht warum, aber das funktioniert nicht.mysqli_stmt :: bind_param() erwartet Parameter 1 als String, Array als gegeben [Gelöst]

array_unshift($params,$types); 
if($stmt = $conn->prepare($sql)){ 
    call_user_func_array(array($stmt, 'bind_param'), refValues($params)); 

    $stmt->execute(); 

Jetzt heißt es:

Warnung: mysqli_stmt :: bind_param() erwartet Parameter 1 Zeichenfolge, Array gegeben zu sein ...

Also, was mit diesem Code ist fehlerhaft ?

function refValues($arr){ 
if(strnatcmp(phpversion(),'5.3') >= 0){ //Reference is required for PHP 5.3 
    $refs = array(); 
    foreach($arr as $key => $value){ 
     $refs[$key] = &$arr[$key]; 
    } 
    return $refs; 
} 
return $arr; 
} 

Die print_r von refValues ​​($ params);

Array ([0] => Array ([0] => i [1] => i [2] => i [3] => i [4] => i [5] => i [6] => i [7] => i [8] => i [9] => s [10] => i [11] => i [12] => i [13] => i [14] => i [15] => i [16] => i [17] => i [18] => i [19] => i [20] => i [21] => i) [1] => 1 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 1241 [9] => [10] => [11] => 1 [12] => [13] => [14] => [15] => 432 [16] => 243 [17] => 0 [18] => 0 [19] => 0 [20] => 0 [21] => 0 [22] => 78) 

Hier ist die Lösung: ich nur die $types Array implodieren hatte. Also dann ist der erste Parameter ein String und kein Array mehr.

+0

und was den Fehler ist nicht klar genug macht? – hassan

+0

@hassan Welches ist "Parameter 1"? – pandaNine

+1

@pandaNine 'refValues ​​($ params)'. – BenM

Antwort

0

Ich weiß nicht, was drin ist $params, aber mysqli_stmt::bind_param erwartet den zweiten und die folgenden Parameter als Referenz.

Bool mysqli_stmt :: bind_param (string $ Arten, Misch & $ var1 [, mixed & $ ...])

Quelle: Doc: mysqli_stmt::bind_param

So haben Sie das Array ändern Werte zu Referenzen. Zum Beispiel:

$params = array(&$var1, &$var2, &$var3); 

Wenn Ihr Array dynamisch ist, verwenden Sie die folgende Funktion zu konvertieren:

function arrayToRef(&$rawArray) 
{ 
    $refArray = array(); 
    foreach($rawArray as $key => $value) 
    { 
     $refArray[$key] = &$rawArray[$key]; 
    } 
    return $refArray; 
} 
+0

Ich möchte die Parameter dynamisch binden . Deine Lösung funktioniert nicht dynamisch, oder? – pandaNine

+0

Sie können das Array konvertieren, ich fügte es zu meiner Antwort – modsfabio

+0

Die Funktion, die ich verwendete, tut das gleiche wie Ihre tun: 'Funktion refValues ​​($ arr) { if (strnatcmp (phpversion(), '5.3')> = 0) {// Referenz ist für PHP 5 erforderlich.3 $ refs = array(); foreach ($ arr als $ key => $ wert) { $ refs [$ key] = & $ arr [$ key]; } return $ refs; } Rückgabe $ arr; } ' So ist die Fehlermeldung immer noch die gleiche. – pandaNine

Verwandte Themen