我在尝试绑定结果时遇到问题。 PHP使用以下
继续输出错误Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement in /var/www/public_html/test.php on line 38
现在,在任何人开始引用其他链接之前,我已经查看了stackoverflow并在Google上进行了一些搜索。我发现的所有例子,包括PHP.net,都说这是正确的......但显然它不是。
这就是我所拥有的:
function __verify($digit4, $woid) {
$query = $this->mysql->prepare("SELECT * FROM pc_wo wo LEFT JOIN pc_owner owner ON owner.pcid=wo.pcid WHERE wo.woid=? AND SUBSTRING(owner.pcphone, -4)=?");
$query->bind_param("is",$woid,$digit4);
if ( !$query->execute() ) return false;
$query->bind_result($resp);
$query->fetch();
var_dump($resp);
return true;
}
修改 我想你不能将bind_result用于通配符select(*)......那么我根据mysqli_stmt使用什么来获取整个数组呢?
谢谢!
答案 0 :(得分:1)
我的解决方案是使用伪方法:
private function __compile($handler)
{
$meta = $handler->result_metadata();
while ($field = $meta->fetch_field()) {
$params[] = &$row[$field->name];
}
call_user_func_array(array($handler, 'bind_result'), $params);
while ($handler->fetch()) {
foreach($row as $key => $val) {
$x[$key] = $val;
}
$results[] = $x;
}
return $results;
}
这可能是一个解决方案,但为什么MySQLi没有为通配符语句包含一个准备好的语句?
答案 1 :(得分:0)
如果你足够幸运,可以使用get_result()
:
if ( !$query->execute() ) return false;
$res = $query->get_result();
$row = $res->fetch-assoc();
如果没有 - 您必须使用其他答案中的这些get_metadata()技巧。