mysqli :: get_result有什么问题?

时间:2011-08-20 17:55:01

标签: php mysqli

我有以下代码:

$postId = $_GET['postId'];
$mysqli = new mysqli('localhost', 'username', 'database', 'name_db');
mysqli_report(MYSQLI_REPORT_ALL);

$stmt = $mysqli->stmt_init();
$stmt->prepare("
SELECT *
FROM posts
WHERE postId = ?
");
$stmt->bind_param('i', $postId);
$stmt->execute();
$result = $stmt->get_result();//Call to undefined method 
$info = $result->fetch_array(MYSQLI_ASSOC);
echo json_encode($info);

我收到上面标记的错误。我做错了什么?

编辑:

将fecth_array()更改为fetch_array()

6 个答案:

答案 0 :(得分:15)

正如其他人所说,它仅适用于最前沿的PHP。你可以这样做(answer to a similar question):

function bind_array($stmt, &$row) {
    $md = $stmt->result_metadata();
    $params = array();
    while($field = $md->fetch_field()) {
        $params[] = &$row[$field->name];
    }

    call_user_func_array(array($stmt, 'bind_result'), $params);
}

// ....
bind_array($stmt, $info);
$stmt->fetch();

echo json_encode($info);

如果您有一个没有参数的简单查询,请使用mysqli::query - 不要将其与动态生成的SQL语句一起使用

答案 1 :(得分:6)

如php文档mysqli_stmt::get_result中所述,自PHP 5.3.0起支持此方法。

用户注释部分中说明:

  

此方法需要mysqlnd驱动程序。 Othervise你会得到这个错误:调用未定义的方法mysqli_stmt :: get_result()

答案 2 :(得分:2)

您可能正在使用不支持get_result()的旧版PHP,如手册页

所述
(No version information available, might only be in SVN)

答案 3 :(得分:2)

manual page没有提供get_result()工作所需的最低版本PHP的明确信息:

  

(没有可用的版本信息,可能只在SVN中)

我不知道这个的背景,但它可能在您的PHP版本中无法使用。

您可以改用fetch()

答案 4 :(得分:0)

我猜它是下面的那一行,改变:

$info = $result->fecth_array(MYSQLI_ASSOC);

为:

$info = $result->fetch_array(MYSQLI_ASSOC);

答案 5 :(得分:0)

检查一下你的PHP mysql本机驱动程序是否启用。 get-> result()仅在启用mysql本机驱动程序时有效。 http://www.php.net/manual/en/mysqli-stmt.get-result.php