This error is caused by a line of code in /usr/share/phpmyadmin/libraries/sql.lib.php
.
It seems when I installed phpMyAdmin using apt
, the version in the repository (phpMyAdmin v4.6.6) is not fully compatible with PHP 7.2. There is a newer version available on the official website (v4.8 as of writing), which fixes these compatibility issues with PHP 7.2.
You can download the latest version and install it manually or wait for the repositories to update with the newer version.
Alternatively, you can make a small change to sql.lib.php
to fix the error.
Firstly, backup sql.lib.php
before editing.
sudo cp /usr/share/phpmyadmin/libraries/sql.lib.php /usr/share/phpmyadmin/libraries/sql.lib.php.bak
Edit sql.lib.php
using vi
:
sudo vi /usr/share/phpmyadmin/libraries/sql.lib.php
Using nano
:
sudo nano /usr/share/phpmyadmin/libraries/sql.lib.php
Press CTRL + W (for nano) or ?
(for vi/vim) and search for:
(count($analyzed_sql_results['select_expr'] == 1)
Replace it with:
((count($analyzed_sql_results['select_expr']) == 1)
Save file and exit. (Press CTRL + X, press Y and then press ENTER for nano
users / hit ESC then type :wq
and press ENTER)
При установке phpMyAdmin на сервер с Debian 9 с установленной версией php7.3 может появиться ошибка count(): Parameter must be an array or an object that implements Countable
. Возможно, в ближайшем будущем разработчики устранят эту ошибку, внеся исправления в официальный дистрибутив, но до сих пор для того, чтобы она не мешала работе, приходится устранять её ручками. Делать это достаточно просто. Как? Рассмотрим ниже.
Данная ошибка выдаётся в виде предупреждения, которое перекрывает весь экран:
Жалобы на работу скрипта plugin_interface.lib.php
:
Warning in ./libraries/sql.lib.php#551
count(): Parameter must be an array or an object that implements Countable
Номер строки может варьироваться от версии phpMyAdmin.
Для того, чтобы продолжить работу, можно просто нажать на кнопку «Игнорировать всё» или «Игнорировать», но это не иправит ситуации и диалоговое окно:
На сервере обнаружены некоторые ошибки!
Пожалуйста, посмотрите вниз текущего окна.
всё равно будет появляться. Для того, чтобы данное сообщение не возникало, нужно внести небольшие правки в два файла phpMyAdmin в исходный код на сервере.
Исправления в файле sql.lib.php
Первое исправление нужно внести в файл /usr/share/phpmyadmin/libraries/sql.lib.php
:
Находим в коде строку
|| (count($analyzed_sql_results['select_expr'] == 1)
и вместо неё вставляем строку
|| ((count($analyzed_sql_results['select_expr']) == 1)
Исправления в файле plugin_interface.lib.php
Второе исправление нужно внести в файл /usr/share/phpmyadmin/libraries/plugin_interface.lib.php
:
Находим в коде строку
if ($options != null && count($options) > 0) {
и вместо неё вставляем строку
if ($options != null && count((array) $options) > 0) {
Резюме
После внесённых правок phpMyAdmin продолжает работать без ошибок:
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Выберите, то, чем пользуетесь чаще всего:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
Notice IN .librariesDisplayResults.class.php#1166 Undefined offset: 39 Backtrace .librariesDisplayResults.class.php#4264: PMA_DisplayResults->_getTableHeaders( array, array, array, array, array, BOOLEAN FALSE, ) .librariesSQL.lib.php#1769: PMA_DisplayResults->getTable( object, array, array, ) .librariesSQL.lib.php#2049: PMA_getHtmlForSqlQueryResultsTable( object, string './themes/original/img/', NULL, array, BOOLEAN TRUE, string '3', INTEGER 3, NULL, object, array, ) .librariesSQL.lib.php#2245: PMA_getQueryResponseForResultsReturned( object, array, string 'website', string 'users_website', NULL, NULL, object, string './themes/original/img/', string '3', INTEGER 3, string 'SELECT * FROM `users_website` LIMIT 0, 50 ', NULL, NULL, NULL, NULL, NULL, string 'SELECT * FROM `users_website`', NULL, ) .librariesSQL.lib.php#2125: PMA_executeQueryAndGetQueryResponse( array, BOOLEAN TRUE, string 'website', string 'users_website', NULL, NULL, NULL, BOOLEAN FALSE, NULL, NULL, NULL, string '', string './themes/original/img/', NULL, NULL, NULL, string 'SELECT * FROM `users_website`', NULL, NULL, ) .SQL.php#201: PMA_executeQueryAndSendQueryResponse( array, BOOLEAN TRUE, string 'website', string 'users_website', NULL, NULL, NULL, BOOLEAN FALSE, NULL, NULL, NULL, string '', string './themes/original/img/', NULL, NULL, NULL, string 'SELECT * FROM `users_website`', NULL, NULL, ) |
Прежде всего, mysql для меня новинка, поэтому я понятия не имею, как и что делать. Я видел много обучающих видео о mysql и php. Итак, моя проблема в том, что когда я вхожу в свой phpmyadmin и открываю базу под названием «Логин» и таблицу под названием «пользователи», появляется сообщение об ошибке со следующими строками: «На сервере обнаружены некоторые ошибки! Пожалуйста, посмотрите в нижней части окна «. Я проверил нижнюю часть окна и увидел огромное красное окно с предупреждением со следующими строками: Есть идеи, как решить эту проблему? Кстати, я использую Linux Mint 19.3 Cinnamon.
Warning in ./libraries/sql.lib.php#613
count(): Parameter must be an array or an object that implements Countable
Backtrace
./libraries/sql.lib.php#2128: PMA_isRememberSortingOrder(array)
./libraries/sql.lib.php#2079: PMA_executeQueryAndGetQueryResponse(
array,
boolean true,
string 'Login',
string 'users',
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
string '',
string './themes/pmahomme/img/',
NULL,
NULL,
NULL,
string 'SELECT * FROM `users`',
NULL,
NULL,
)
./sql.php#221: PMA_executeQueryAndSendQueryResponse(
array,
boolean true,
string 'Login',
string 'users',
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
string '',
string './themes/pmahomme/img/',
NULL,
NULL,
NULL,
string 'SELECT * FROM `users`',
NULL,
NULL,
)
2 ответа
Лучший ответ
Прежде всего перед редактированием сделайте резервную копию sql.lib.php.
sudo cp /usr/share/phpmyadmin/libraries/sql.lib.php /usr/share/phpmyadmin/libraries/sql.lib.php.backup
Или вы можете сделать это вручную без командной строки. Зайдите в каталог папки /usr/share/phpmyadmin/libraries
, найдите в нем, скопируйте мимо sql.lib.php
и переименуйте sql.lib.php.backup
После этого
sudo nano /usr/share/phpmyadmin/libraries/sql.lib.php
Нажмите CTRL + W, найдите этот код (count($analyzed_sql_results['select_expr'] == 1)
и замените его на ((count($analyzed_sql_results['select_expr']) == 1)
после sudo service apache2 restart
. Здесь ошибка первого braket ().
1
Martin
24 Ноя 2020 в 12:50
Из этого я помню, что это проблема со знанием, которая может произойти, если у вас есть старая версия phpmyadmin и какая-то новейшая версия php. Это ваш сервер и у вас есть root права? Если да, вы можете обновить версии или просто внести небольшие исправления в код phpmyadmin. Если это не ваш сервер, попросите поддержку обновить версии или исправить ошибку вручную.
0
Ivan Pruchai
24 Ноя 2020 в 11:01
Эта ошибка вызвана строкой кода в /usr/share/phpmyadmin/libraries/sql.lib.php.
Кажется, когда я установил phpMyAdmin с помощью apt, версия в хранилище (phpMyAdmin v4.6.6) не полностью совместима с PHP 7.2. На официальном веб-сайте доступна более новая версия (на момент написания v4.8), которая устраняет эти проблемы совместимости с PHP 7.2.
Вы можете загрузить последнюю версию и установить ее вручную или дождаться обновления репозиториев до более новой версии.
Кроме того, вы можете внести небольшое изменение в sql.lib.php, чтобы исправить ошибку.
Во-первых, сделайте резервную копию sql.lib.php перед редактированием.
sudo cp /usr/share/phpmyadmin/libraries/sql.lib.php /usr/share/phpmyadmin/libraries/sql.lib.php.bak
Отредактируйте sql.lib.php. Используя vi:
sudo vi /usr/share/phpmyadmin/libraries/sql.lib.php
Используя nano:
sudo nano /usr/share/phpmyadmin/libraries/sql.lib.php
Нажмите CTRL + W (для нано) или ?
(для vi/vim) и найдите (count($analy_sql_results[‘select_expr’] == 1)
Замените его на ((count($analysis_sql_results[‘select_expr’]) == 1)
Сохраните файл и выйдите. (Нажмите CTRL + X
, Нажмите Y
а затем нажмите ENTER
для нано пользователей / хит ESC
затем введите :wq
и нажмите ENTER
)