[英]mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement
[英]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.