PHP MySQLI::bind_result 问题

标签 php mysql mysqli

我在尝试绑定(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/

相关文章:

php - 如何在 foreach 中使用多维数组?

mysql 2.5M 行计数慢

mysql - 从MYSQL中的数据中查找缩写

php - 比较 2 个表并根据条件更新一个表

php - 在我的 PHP 脚本中找不到错误。有人可以指出给我吗

php - 如何将查询的第一个结果与其余结果分开?

javascript - 使用 javascript 设置变量并通过表单提交

javascript - dataTable 插件不工作,它在一页中显示所有记录,我每页只需要 10 条记录

php - 检索与 PHP mysqli_real_connect() 建立连接需要多长时间

php - 尝试获取一组数据以在一封电子邮件而不是多封电子邮件中发送