22 ноября 2016      247      0

PHP Fatal error: Call to undefined method mysqli_result::fetch_all()

Короткая заметка на тему того, как бороться с ошибкой, которую я вынес аж в заголовок. Если в своих проектах вы все еще используете mysql_connect и mysql_query, то вы определенно с недоумением разведете руками в немом вопросе: «А зачем вообще использовать этот fetch_all?». Если в вашем распоряжении уже есть куча скриптов и продуктов, которые прекрасно обходятся без mysqli, то их, конечно, лучше не трогать, но вот при написании чего-то нового я настоятельно рекомендую обратить внимание на красную плашку на странице справки…

PHP Fatal error: Call to undefined method mysqli_result::fetch_all()

Mysqli — альтернатива стандартному расширению PHP mysql для работы с mysql базой данных. В отличие от предшественника mysqli поддерживает более новые механизмы API работы с БД и потому должно рассматриваться как замена устаревшей библиотеке. Подробнее о преимуществах mysqli над mysql можно почитать все на том же php.net, однако главным пунктом, непременно остается тот факт, что расширение mysql официально объявлено deprecated. Таким образом, переход к новым расширениям лишь вопрос времени, и именно поэтому я решил написать эту заметку о борьбе с одной из трудностей перехода…

Замечательная функция mysqli_result::fetch_all позволяет одним вызовом получить все данные из результата запроса в ассоциативный массив (совсем не обязательно только в него).

$rows = NULL;
if ($result = $conn->query($sql)) {
    $rows = $result->fetch_all(MYSQLI_ASSOC);
    $result->free();
}

Эта функция доступна вместе с расширением для PHP mysqlnd или MySQL Native Driver. В его отсутствие приходится мириться с заменителями

$rows = NULL;
if ($result = $conn->query($sql)) {
    $rows = array();
    while ($row = $result->fetch_assoc()) {
        $rows[] = $row;
    }
}

Такое вот решение! Ну либо ставим mysqlnd.

Все темы на сайте

© 2017 BorPost · Копирование материалов сайта без разрешения запрещено