PHP MySQLI :: bind_result问题

时间:2013-08-12 19:30:29

标签: php mysql mysqli

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

谢谢!

2 个答案:

答案 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()技巧。