Что не так с 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);