繁体   English   中英

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()的解决方案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM