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

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

5 голосов
/ 20 августа 2011

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

$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);

И я получаю ошибку, отмеченную выше. Что я сделал не так?

EDIT:

изменено fecth_array () на fetch_array ()

Ответы [ 6 ]

15 голосов
/ 20 августа 2011

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

6 голосов
/ 27 августа 2013

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

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

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

2 голосов
/ 20 августа 2011

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

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

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

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

2 голосов
/ 20 августа 2011

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

(No version information available, might only be in SVN)
0 голосов
/ 06 июля 2014

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

0 голосов
/ 20 августа 2011

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

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

до:

$info = $result->fetch_array(MYSQLI_ASSOC);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...