Я просто нажал что-то с моей локальной машины на сайт, и я получаю пустые страницы повсюду. Я отследил проблему до mysqli_fetch_all, когда я использую то, что все ломается. Почему он это делает? и как я могу это исправить? если я использую mysqli_fetch_array или mysqli_fetch_row или mysqli_fetch_assoc, он работает, но мои данные отображаются неправильно.
Это одна из функций, которая ломается:
function getUserFields($connection){ $query = mysqli_query($connection, "DESCRIBE `adminUsers`"); $results = mysqli_fetch_all($query, MYSQLI_ASSOC); return $results; }
$connection
– это соединение с моей базой данных, я подтвердил, что заполняется работа и запрос запроса, просто mysqli_fetch_all
не работает, как я могу исправить это в функции, не изменяя, как данные отображаются в настоящее время.
Функция mysqli_fetch_all()
и ее объектно-ориентированная копия ( mysqli_result::fetch_all)
доступны только в PHP 5.3 и более поздних версиях.
Кажется, на вашем сервере работает более низкая версия PHP, или вам не хватает базового драйвера MySQL (от которого зависит эта функция) , что объясняет, почему работают другие функции fetch, а это не так.
Из руководства :
mysqli_fetch_all
mysqli_result :: fetch_all
(PHP 5> = 5.3.0)
Для будущей отладки, включите ошибки или обратитесь к вашему журналу ошибок, поскольку это обычно помогает выявить проблему.
error_reporting(E_ALL); ini_set('display_errors', '1');
Если у вас нет доступа для обновления версии PHP или установки MySQLND, вы можете просто преобразовать код в ручную итерацию с помощью mysqli_fetch_assoc()
:
function getUserFields($connection){ $query = mysqli_query($connection, "DESCRIBE `adminUsers`"); $results = array(); if($query){ while($row = mysqli_fetch_assoc($query)){ $results[] = $row; } } return $results; }
Согласно документации php эта функция является только mysqlnd (родной драйвер MySQL). Если у вас его нет на сервере, он не будет выполняться (и бросать ошибки).
Доступно только с mysqlnd.
Поскольку mysqli_fetch_all () возвращает все строки в виде массива за один шаг, он может потреблять больше памяти, чем некоторые подобные функции, такие как mysqli_fetch_array (), который возвращает только одну строку за раз из набора результатов. Кроме того, если вам нужно выполнить итерацию по набору результатов, вам понадобится конструкция цикла, которая будет еще больше влиять на производительность. По этим причинам mysqli_fetch_all () следует использовать только в тех ситуациях, когда полученный набор результатов будет отправлен на другой уровень для обработки.
Для получения дополнительной информации об этом посетите http://www.php.net/manual/en/mysqli-result.fetch-all.php#refsect1-mysqli-result.fetch-all-mysqlnd .
Вместо этого используйте mysqli_fetch_array – http://www.php.net/manual/en/mysqli-result.fetch-all.php . Он использует почти те же параметры, поэтому проблем не должно быть.
Возможно, проблема кроется в другом месте, но это было бы моей первой догадкой (пока отчет об ошибках не разрешен: /)
EDIT: вам нужно будет перебирать результаты, потому что mysqli_fetch_array (и другие функции из этого семейства) возвращает одну строку за раз . Вероятно, поэтому у вас есть неправильные результаты при их использовании.
Другое решение будет включать расширение php_mysqlnd.dll / php_mysqlnd.so в php.ini на сервере и перезапуск службы (возможно, у вас есть на локальной машине, и именно поэтому она работает)