Résolution de l'erreur "mysqli bind_param() attend une référence"
Lorsque vous rencontrez l'erreur "Paramètre 3 de mysqli_stmt::bind_param() censé être une référence, valeur donnée", cela indique que le tableau $params n'est pas correctement configuré pour la liaison. Pour résoudre ce problème, il est crucial de comprendre les exigences de mysqli_stmt_bind_param().
L'erreur survient car mysqli_stmt_bind_param() s'attend à ce que les paramètres soient transmis par référence. Cependant, le tableau $params contient des copies de valeurs, qui ne sont pas des références. Pour corriger cela, vous devez convertir les valeurs de $params en références en utilisant la méthode suivante :
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; }
Une fois que le tableau $params contient des références aux valeurs, vous pouvez lier correctement les paramètres en utilisant ce qui suit code :
AOP :
$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), refValues($params))); mysqli_stmt_execute($sql_stmt);
POO :
$insert_stmt = $mysqli->prepare($query); array_unshift($params, $param_type); call_user_func_array(array($insert_stmt, 'bind_param'), refValues($params)); $insert_stmt->execute();
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!