statement - prepare mysqli php




mysqli bind_param() erwartet eine Referenz zu sein, Wert gegeben (2)

Kann nicht herausfinden, was verursacht Fehler Parameter 3 zu mysqli_stmt :: bind_param () erwartet, um eine Referenz zu sein, Wert in ...

PDO
$query = "INSERT INTO test (id,row1,row2,row3) VALUES (?,?,?,?)";
$params = array(1,"2","3","4");
$param_type = "isss";
$sql_stmt = mysqli_prepare ($mysqli, $query);
call_user_func_array('mysqli_stmt_bind_param', array_merge(array($sql_stmt, $param_type), $params));
mysqli_stmt_execute($sql_stmt);

Auch versucht OOP

OOP
$insert_stmt = $mysqli->prepare($query);
array_unshift($params, $param_type);
call_user_func_array(array($insert_stmt, 'bind_param'), $params);
$insert_stmt->execute();

Aber der gleiche Fehler, nur dass jetzt Parameter 2 ein Problem verursacht.

Also, was ist los mit $ params? Ich brauche $ params, um ein Array von Werten zu sein.


Weiß nicht warum "PDO" im Code, aber das ist das einzig richtige Wort. Verwenden Sie PDO und haben Sie kein Problem mit mysqli Prepared Statements:

$query = "INSERT INTO test (id,row1,row2,row3) VALUES (?,?,?,?)";
$params = array(1,"2","3","4");
$stmt = $pdo->prepare($query);
$stmt->execute($params);

Schauen Sie sich diesen sauberen und prägnanten Code an und vergleichen Sie ihn mit einem, den Sie mit mysqli Prepared Statements benötigen.


Eingeführt in PHP 5.6 können Sie den Operator ... ("spread operator") verwenden, um dasselbe Ergebnis mit weniger Problemen zu erzielen:

mysqli_stmt_bind_param($sql_stmt, $param_type, ...$params);




mysqli