我一直试图让这个工作在一天中的大部分时间都无济于事。
基本上,我正在尝试在foreach()循环中使用bind_param(),但是,当我这样做时,我会收到以下错误:
Warning: mysqli_stmt::bind_param() [mysqli-stmt.bind-param]: Number of variables doesn't match number of parameters in prepared statement in /nfs/domains/domain.com/html/v2/includes/classes/class.Database.php on line 72
Warning: mysqli_stmt::bind_param() [mysqli-stmt.bind-param]: Number of variables doesn't match number of parameters in prepared statement in /nfs/domains/domain.com/html/v2/includes/classes/class.Database.php on line 72
我假设这是由于PHP认为由于循环中的单个bind_param()语句只有一个参数被绑定,因此它与prepare语句中指定的参数数量不匹配。 / p>
如果这是对的,我该如何纠正?
代码摘录(第19行):
public function query($sql, $params) {
if(!$sobj = $this->conn->prepare($sql)) {
die('Query Prepare Error (' . $this->conn->mysqli_errno . ') '
. $this->conn->mysqli_error);
} else {
if(!is_array($params)) {
$params = array_slice(func_get_args(), 1);
}
foreach($params as $value) {
$type = strtolower(gettype($value));
$sobj->bind_param($type[0], $value);
}
$sobj->execute();
$sobj->bind_result($result);
$sobj->fetch();
$sobj->close();
return $result;
}
}
感谢。
答案 0 :(得分:2)
mysqli_stmt::bind_param
希望您在一次调用中绑定所有必需的参数,而不是在多次连续调用中绑定。它需要更像这样:
$types = '';
foreach($params as $value) {
$types.= substr(strtolower(gettype($value)), 0, 1);
}
call_user_func_array(array($sobj, 'bind_param'), array_merge(array($types), $params)));
请查看有关call_user_func_array
here的警告。