Что не так с mysqli::get_result?

У меня есть следующий код:

$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 ответов

Как уже говорили другие, он доступен только в новейшем 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);

Или используйте mysqli::query, если у вас есть простой запрос без параметров - не используйте его с динамически генерируемыми SQL-операторами.

Как упомянуто в документации php mysqli_stmt:: get_result, этот метод поддерживается начиная с PHP 5.3.0.

И в разделе примечаний пользователя указано, что:

Этот метод требует драйвера mysqlnd. В противном случае вы получите эту ошибку: вызов неопределенного метода mysqli_stmt::get_result()

Вы, вероятно, используете старую версию PHP, не поддерживающую get_result(), как указано на странице руководства

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

Страница руководства не дает четкой информации о том, какая минимальная версия PHP необходима для get_result() работать:

(Информация о версии недоступна, может быть только в SVN)

Я не знаю предысторию этого, но она может просто не быть доступной в вашей версии PHP.

Вы могли бы использовать fetch() вместо.

Проверьте, включен ли ваш PHP-драйвер mysql. get->result() работает, только если включен собственный драйвер mysql. http://www.php.net/manual/en/mysqli-stmt.get-result.php

Я предполагаю, что это строка ниже, измените:

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

чтобы:

$info = $result->fetch_array(MYSQLI_ASSOC);
Другие вопросы по тегам