我在尝试绑定(bind)我的结果时遇到问题。 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 用于通配符选择 (*)...那么我根据 mysqli_stmt 使用什么来获取整个数组?
谢谢!
最佳答案
我的解决方案是使用伪方法:
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 不包含通配符语句的准备语句?
关于PHP MySQLI::bind_result 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18195179/