mysqli :: get_result有什么问题?

ein*_*ein 5 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);
Run Code Online (Sandbox Code Playgroud)

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

编辑:

将fecth_array()更改为fetch_array()

vst*_*stm 15

正如其他人所说,它仅适用于最前沿的PHP.你可以这样做(回答类似的问题):

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);
Run Code Online (Sandbox Code Playgroud)

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

  • 请不要建议从准备好的语句中"降级"到bogstandard字符串.让人们走另一条路是很困难的. (10认同)

Moh*_*nme 6

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

并在陈述用户指出节:

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


jer*_*oen 0

我\xc2\xb4m猜测\xc2\xb4s下面的行,更改:

\n\n
$info = $result->fecth_array(MYSQLI_ASSOC);\n
Run Code Online (Sandbox Code Playgroud)\n\n

到:

\n\n
$info = $result->fetch_array(MYSQLI_ASSOC);\n
Run Code Online (Sandbox Code Playgroud)\n