1

我在尝试绑定我的结果时遇到问题。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 使用什么来获取整个数组?

谢谢!

4

2 回答 2

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 没有为通配符语句合并准备好的语句?

于 2013-08-12T20:12:14.167 回答
0

如果你足够幸运,你可以使用get_result()

if ( !$query->execute() ) return false;
$res = $query->get_result();
$row = $res->fetch-assoc();

如果不是 - 你一定会使用其他答案中的这些 get_metadata() 技巧。

于 2013-08-12T20:08:41.920 回答