Mysqli:mysqli_stmt::bind_param():变量的数量与预准备语句中的参数数量不匹配


Mysqli:mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement

我在@chris85的帮助下创建动态mysqli查询。我能够创建这个。

<?php
require_once 'include/db.php';    
$firstname = 'Alpha';
$lastname = 'Romeo';
$query = "SELECT * FROM users";
$cond = array();
$params = array();
if (!empty($firstname)) {
    $cond[] = "fname = ?";
    $params[] = $firstname;
}
if (!empty($lastname)) {
    $cond[] = "lname = ?";
    $params[] = $lastname;
}
if (count($cond)) {
    $query .= ' WHERE ' . implode(' AND ', $cond);
}
echo $query;
$stmt = $mysqli->prepare($query);
if(!empty($params)) {
     foreach($params as $param) {
         $stmt->bind_param("s", $param);
        echo $param;
     }
}
$stmt->execute();
?>

当我执行这个时,我得到了这个。

SELECT * FROM users WHERE fname = ? AND lname = ?
Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in /home/u983213557/public_html/test.php on line 32
AlphaRomeo

我不确定为什么它会失败。 请建议我解决此问题。

它失败了,因为 mysqli 不是 PDO,你不能在循环中绑定。因此,您必须使用技巧在 mysqli 中绑定数组。幸运的是,如果您的 PHP 版本是 5.6 或 7,您可以使用以下代码:

$stmt = $db->prepare($query);
$types = str_repeat('s', count($param));
$statement->bind_param($types, ...$param);
$statement->execute();

如果没有,那么您必须使用基于call_user_func()的解决方案

相关文章: