Phpmyadmin - count(): Параметр должен быть массивом или объектом, который реализует Countable

Я загрузил резервную копию в таблицу, открыв таблицу, я вижу следующее:

Warning in ./libraries/sql.lib.php#601
count(): Parameter must be an array or an object that implements Countable

Backtrace

./libraries/sql.lib.php#2038: PMA_isRememberSortingOrder(array)
./libraries/sql.lib.php#1984: PMA_executeQueryAndGetQueryResponse(
array,
boolean true,
string 'alternativegirls',
string 'tgp_photo',
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
string '',
string './themes/pmahomme/img/',
NULL,
NULL,
NULL,
string 'SELECT * FROM `tgp_photo`',
NULL,
NULL,
)
./sql.php#216: PMA_executeQueryAndSendQueryResponse(
array,
boolean true,
string 'alternativegirls',
string 'tgp_photo',
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
string '',
string './themes/pmahomme/img/',
NULL,
NULL,
NULL,
string 'SELECT * FROM `tgp_photo`',
NULL,
NULL,
)
./index.php#53: include(./sql.php)

Внутри phpMyAdmin...

PHP равен 7.2, сервер Ubuntu 16.04, установленный вчера.

В поисках я видел, что некоторые из них имеют эту ошибку в своем коде, но я не нашел никого, кто получил ее в phpMyAdmin...

Что мне делать? Это моя ошибка? Ошибка phpmyadmin? ждать обновления? Я возвращаюсь к PHP 7.1?

Ответ 1

Отредактируйте файл /usr/share/phpmyadmin/libraries/sql.lib.php:

sudo nano /usr/share/phpmyadmin/libraries/sql.lib.php

В строке 613 функция count всегда принимает значение true, поскольку закрывающая скобка после $analyzed_sql_results['select_expr']. Выполнение приведенных ниже замен решает эту проблему, тогда вам нужно будет удалить последние закрывающие скобки в строке 614, поскольку теперь они являются дополнительными скобками.

Заменить:

((empty($analyzed_sql_results['select_expr']))
    || (count($analyzed_sql_results['select_expr'] == 1)
        && ($analyzed_sql_results['select_expr'][0] == '*')))

С:

((empty($analyzed_sql_results['select_expr']))
    || (count($analyzed_sql_results['select_expr']) == 1)
        && ($analyzed_sql_results['select_expr'][0] == '*'))

Перезапустите сервер apache:

sudo service apache2 restart

Ответ 2

Самый простой способ:

Просто запустите эту ниже командную строку в терминале и вернитесь в PhpMyAdmin. Теперь он отлично работает :)

sudo sed -i "s/|\s*\((count(\$analyzed_sql_results\['select_expr'\]\)/| (\1)/g" /usr/share/phpmyadmin/libraries/sql.lib.php

Ручной метод:

Открыть файл sql.lib.php

nano /usr/share/phpmyadmin/libraries/sql.lib.php

Найти для count($analyzed_sql_results['select_expr'] код в файле. Вы можете получить это в строке ~ 613. Вы можете видеть это ниже неправильного кода

|| (count($analyzed_sql_results['select_expr'] == 1)

Просто замените этот неправильный код на это ниже

|| ((count($analyzed_sql_results['select_expr']) == 1)

Сохраните файл и войдите в PhpMyAdmin.

Теперь он отлично работает :)

Ответ 3

Я нашел этот счетчик PHP 7.2() - ошибка SYNTAX в sql.lib.php

Это прекрасно работает в моем конфиге:

Debian 9, 
PHP 7.2.3-1+0~20180306120016.19+stretch~1.gbp81bf3b (cli) (built: Mar  6 2018 12:00:19) ( NTS )

Откройте /usr/share/phpmyadmin/libraries/sql.lib.php

Изменить строку: переместить скобки перед ==

|| ( (count ($ analysis_sql_results ['select_expr'] ) == 1) && ($ analysis_sql_results ['select_expr'] [0] == '*')))

в

function PMA_isRememberSortingOrder($analyzed_sql_results){

return $GLOBALS['cfg']['RememberSorting']
    && ! ($analyzed_sql_results['is_count']
        || $analyzed_sql_results['is_export']
        || $analyzed_sql_results['is_func']
        || $analyzed_sql_results['is_analyse'])
    && $analyzed_sql_results['select_from']
    && ((empty($analyzed_sql_results['select_expr']))
        || ((count($analyzed_sql_results['select_expr'] ) == 1)
            && ($analyzed_sql_results['select_expr'][0] == '*')))
    && count($analyzed_sql_results['select_tables']) == 1;
 }

Ответ 4

тестируемый на Debian, должен работать на Ubuntu:

1.) Сначала загрузите последний файл phpMyadmin.

2.) Удалите (сделайте резервную копию) весь предыдущий файл версии, расположенный в каталоге /usr/share/phpmyadmin.

3.) Раскройте в /usr/share/phpmyadmin/ каталог все файлы последнего phpmyadmin.

4.) Изменить файловые libraries/vendor_config.php и изменить строку:

define('CONFIG_DIR', '');

в

define('CONFIG_DIR', '/etc/phpmyadmin/');

а также

define('TEMP_DIR', './tmp/');

в

define('TEMP_DIR', '/tmp/');

5.) перезапустите сервер Apache и выполните.

Ответ 5

Редактировать файл: '/usr/share/phpmyadmin/libraries/sql.lib.php'

Заменить: (count($analyzed_sql_results['select_expr'] == 1)

С помощью: (count($analyzed_sql_results['select_expr']) == 1

это сработало для меня

Ответ 6

Works on UBUNTU 18.04 


Edit file: '/usr/share/phpmyadmin/libraries/sql.lib.php'
Replace: (count($analyzed_sql_results['select_expr'] == 1)
With:  ((count($analyzed_sql_results['select_expr']) == 1)

Restart the server
sudo service apache2 restart

Ответ 7

Если у кого-то есть аналогичная ошибка на странице экспорта DB (у меня была эта проблема в Ubuntu 18.04), затем замените строку 551 в файле /usr/share/phpmyadmin/libraries/plugin_interface.lib.php кодом

if ($options != null && (is_array($options) || $options instanceof Countable) && count($options) > 0) {

Ответ 9

Выполните следующие шаги на ubuntu-18.04:

Шаг 1) найдите sql.lib.php

Он покажет что-то вроде:

/usr/share/phpmyadmin/libraries/sql.lib.php

Шаг 2) Откройте терминал (Alt t) и напишите:

sudo /usr/sbin/pma-configure

Шаг 3) sudo gedit/usr/share/phpmyadmin/libraries/sql.lib.php и sudo gedit/usr/share/phpmyadmin/libraries/sql.lib.php поиск ниже:

 

    function PMA_isRememberSortingOrder($analyzed_sql_results)
     {
        return $GLOBALS['cfg']['RememberSorting']
            && ! ($analyzed_sql_results['is_count']
                || $analyzed_sql_results['is_export']
                || $analyzed_sql_results['is_func']
                || $analyzed_sql_results['is_analyse'])
            && $analyzed_sql_results['select_from']
            && ((empty($analyzed_sql_results['select_expr']))
                || (count($analyzed_sql_results['select_expr'] == 1)
                    && ($analyzed_sql_results['select_expr'][0] == '*')))
            && count($analyzed_sql_results['select_tables']) == 1;
     }

Шаг 4) Замените выше функцию:

     function PMA_isRememberSortingOrder($analyzed_sql_results)
     {
        return $GLOBALS['cfg']['RememberSorting']
            && ! ($analyzed_sql_results['is_count']
                || $analyzed_sql_results['is_export']
                || $analyzed_sql_results['is_func']
                || $analyzed_sql_results['is_analyse'])
            && $analyzed_sql_results['select_from']
            && ((empty($analyzed_sql_results['select_expr']))
                || (count($analyzed_sql_results['select_expr']) == 1)
                    && ($analyzed_sql_results['select_expr'][0] == '*'))
            && count($analyzed_sql_results['select_tables']) == 1;
     }

Шаг 4) Сохранить и закрыть файл и под командой на терминале

sudo /usr/sbin/pma-secure

Шаг 5) sudo service mysql reload

Шаг 6) sudo service apache2 reload

Это работает для меня.. Goodluck

Ответ 10

откройте этот файл: '/usr/share/phpmyadmin/libraries/sql.lib.php'

sudo nano /usr/share/phpmyadmin/libraries/sql.lib.php

нажмите ctrl + w для поиска (count ($ analysis_sql_results ['select_expr'] == 1)

Find: count($analyzed_sql_results['select_expr'] == 1)

Replace With:  (count($analyzed_sql_results['select_expr']) == 1)

Перезагрузите сервер

 sudo service apache2 restart

Кроме того, если вы все еще сталкиваетесь с той же проблемой, то выполните следующее

открыть этот файл /usr/share/phpmyadmin/libraries/plugin_interface.lib.php

sudo nano /usr/share/phpmyadmin/libraries/plugin_interface.lib.php

Найти: if ($ options! = Null && count ($ options)> 0) {

Ctrl+w : if ($options != null && count($options) > 0) {

заменить следующим кодом

if ($options != null && count((array)$options) > 0) {

Теперь сохраните и перезагрузите сервер

sudo /etc/init.d/apache2 restart

Ответ 11

Предупреждение в. /libraries/plugin_interface.lib.php#532

count(): параметр должен быть массивом или объектом, который реализует счетное

count(): Parameter must be an array or an object that implements Countable

Пример библиотеки phpmyadmins - попытаться посчитать какой-нибудь параметр. В этой строке 532 я нашел этот код по этому пути.

phpmyadmins library try to count some parameter

Отредактируйте файл /usr/share/phpmyadmin/libraries/plugin_interface.lib.php в строке 532:

sudo nano /usr/share/phpmyadmin/libraries/plugin_interface.lib.php

Найдите строку if ($options != null && count($options) > 0) { и замените count($options) на count((array)$options).

enter image description here

Перезапустите службу Apache:

sudo service apache2 restart

В новой версии php нельзя использовать count() или sizeof() с типом массива un. Таким образом, вы должны принудительно изменить параметр в массив здесь.

Ответ 12

Попробуйте заменить эту функцию в файле: /usr/share/phpmyadmin/libraries/sql.lib.php

function PMA_isRememberSortingOrder($analyzed_sql_results)
{
    return $GLOBALS['cfg']['RememberSorting']
        && ! ($analyzed_sql_results['is_count']
            || $analyzed_sql_results['is_export']
            || $analyzed_sql_results['is_func']
            || $analyzed_sql_results['is_analyse'])
        && $analyzed_sql_results['select_from']
        && ((empty($analyzed_sql_results['select_expr']))
            || (count($analyzed_sql_results['select_expr']) == 1)
                && ($analyzed_sql_results['select_expr'][0] == '*'))
        && count($analyzed_sql_results['select_tables']) == 1;
}

Ответ 13

Ubuntu 18.10 (декабрь 2018 г.)

Строки 613, 614, 615 заменить на:

        || count($analyzed_sql_results['select_expr']) == 1
            && ($analyzed_sql_results['select_expr'][0] == '*'))
    && count($analyzed_sql_results['select_tables']) == 1;

Ответ 14

Я думаю, что лучший вариант - обновить Phpmyadmin до версии, в которой это уже исправлено.

Пока он не будет опубликован как deb, вы можете сделать это как в ответе @crimson-501, который я скопирую ниже:

  • Ваш первый шаг - установить PMA (phpMyAdmin) из официального репозитория Ubuntu: apt-get install phpmyadmin.
  • Затем перейдите в каталог usr/share: cd/usr/share.
  • В-третьих, удалите каталог phpmyadmin: rm -rf phpmyadmin.
  • Теперь нам нужно загрузить последнюю версию PMA в нашу систему (обратите внимание, что вам нужно wget: apt-get install wget): wget -P/usr/share/"https://files.phpmyadmin.net/phpMyAdmin/4.8.2/phpMyAdmin-4.8.2-english.zip" Позвольте мне объяснить аргументы этой команды, -P определяет путь, а" link.zip "в настоящее время (17.07.18) является последней версией PMA. Вы можете найти эти ссылки ЗДЕСЬ.
  • Для этого следующего шага вам нужно разархивировать (apt-get install unzip): unzip phpMyAdmin-4.8.2-english.zip. Мы только что распаковали PMA, теперь перенесем его в последний дом.
  • Давайте использовать команду cp (copy) для перемещения наших файлов! Обратите внимание, что мы должны добавить аргумент -r так как это папка. cp -r phpMyAdmin-4.8.2-english phpmyadmin.
  • Теперь пришло время очистить: rm -rf phpMyAdmin-4.8.2-english.

Продолжай читать!

Теперь вы можете заметить две ошибки после входа в PMA.

the configuration file now needs a secret passphrase (blowfish_secret). phpmyadmin
The $cfg['TempDir'] (./tmp/) is not accessible. phpMyAdmin is not able to cache templates and will be slow because of this.

Однако эти проблемы относительно легко исправить. Для первой проблемы все, что вам нужно сделать, это взять ваш редактор и отредактировать /usr/share/phpmyadmin/config.inc.php но есть проблема, мы удалили ее! Все, что вам нужно сделать, это: cd/usr/share/phpmyadmin & cp config.sample.inc.php config.inc.php.

Пример phpMyAdmin Запись секретной переменной Blowfish:

/*
 * This is needed for cookie based authentication to encrypt password in
 * cookie
 */
$cfg['blowfish_secret'] = '{^QP+-(3mlHy+Gd~FE3mN{gIATs^1lX+T=KVYv{ubK*U0V'; 
/* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

Теперь сохраните и закройте файл.

  • Теперь мы создадим каталог tmp для PMA: mkdir tmp & chown -r www-data:www-data/usr/share/phpmyadmin/tmp. Последняя команда позволяет веб-серверу Apache владеть каталогом tmp и редактировать его содержимое.

Ответ 15

Работа для меня.. Ubuntu 18.04

sudo nano /usr/share/phpmyadmin/libraries/sql.lib.php

Найти код для count($analyzed_sql_results['select_expr'] в файле. Вы можете получить его в строке ~ 613.

|| (count($analyzed_sql_results['select_expr'] == 1)

Просто замените код:

|| ((count($analyzed_sql_results['select_expr']) == 1)

Сохраните файл и перезагрузите PhpMyAdmin.

Готово!!!

Ответ 16

Работает на UBUNTU 16.04.3 Просто откройте

USR/доли/библиотеки /sql.lib.php

модифицировать

|| (count($analyzed_sql_results['select_expr'] == 1)

к

|| ((count($analyzed_sql_results['select_expr']) == 1)

Ответ 17

Изменить файл '/usr/share/phpmyadmin/libraries/sql.lib.php' Заменить: (сделать резервную копию)

"|| (count($analyzed_sql_results['select_expr'] == 1) 
&&($analyzed_sql_results['select_expr'][0] == '*'))) 
&& count($analyzed_sql_results['select_tables']) == 1;"

С:

"|| (count($analyzed_sql_results['select_expr']) == 1) 
&& ($analyzed_sql_results['select_expr'][0] == '*') 
&& (count($analyzed_sql_results['select_tables']) == 1));"

Ответ 18

Это исправлено в более поздних версиях PHPMyAdmin. Хранилища программного обеспечения Ubuntu для Ubuntu 18.04.2 содержат версию 4.6.6.5, в то время как они в настоящее время находятся на 4.9.0.1. Обновление установки PHPMyAdmin решит эту проблему, но может оказаться более рискованным, чем просто редактирование одной строки кода. Вот как я это сделал на своем сервере Ubuntu. Шаги по сути одинаковы (с другим путем) для всех операционных систем.

  1. Скачать PHPMyAdmin.
wget https://files.phpmyadmin.net/phpMyAdmin/4.9.0.1/phpMyAdmin-4.9.0.1-all-languages.zip
unzip phpMyAdmin-4.9.0.1-all-languages.zip
  1. Сделайте резервную копию вашей старой установки PHPMyAdmin.
cp -r /usr/share/phpmyadmin ~/phpmyadmin-backup
  1. Удалите новый PHPMyAdmin на старый PHPMyAdmin
cd phpMyAdmin-4.9.0.1-all-languages
rm -r /usr/share/phpmyadmin/doc/html
cp -R * /usr/share/phpmyadmin/

Убедитесь, что это работает. Если это не так, хорошо... У вас есть резервная копия, поэтому восстановите ее и вручную отредактируйте неисправную строку. Исходя из своего личного опыта, после этого я обнаружил, что версия 4.6.6.5 не только изобилует ошибками, но и невероятно медленной по сравнению с новой 4.9.0.1. Увеличение скорости было чистой магией для чего-то, что, как я думал, имело качество WordPress.

Ответ 19

Я испробовал все вышеперечисленное решение, но у меня не получилось.

Попробуй это:-

Установите требуемую версию PHP (в моем случае 7.0), а затем в терминале введите

sudo update-alternatives --config php

Вывод будет таким:

enter image description here

Затем вы можете переключиться на любую версию PHP, просто введя номер выбора (в моем случае 1).

Надеюсь, что это может помочь другим - :)

Ответ 20

У меня была эта проблема при использовании окон, и ответы выше решили это для меня, однако, когда я переключился на Linux (ubuntu 18.04 LTS), у меня была такая же проблема, и я не мог понять, как ее решить, потому что я не видел файл '/usr/share/phpmyadmin/libraries/sql.lib.php.

Этот файл sql.lib.php не был в папке общего доступа или папке phpmyadmin/libraries в каталоге my/opt/lampp - так как я использовал xampp на моем ubuntu. На основе обновления, внесенного в xampp (поскольку я использовал последнюю установку на данный момент).

Ответ по-прежнему должен заменить: (count($analyzed_sql_results['select_expr'] == 1)

С помощью: (count($analyzed_sql_results['select_expr']) == 1

Однако файл для поиска - Sql.php найденный в /opt/lampp/phpmyadmin/libraries/classes/Sql.php

Будущие обновления или если вы все еще не найдете его: используйте grep -r 'count($analyzed_sql_results'/opt/lampp/phpmyadmin для поиска соответствующих документов в вашем каталоге и соответственно отредактируйте

Ответ 21

Обновите файл phpMyAdmin 4.8.3. это решает проблемы совместимости с PHP 7.2

Ответ 22

Заменить функцию:

function PMA_isRememberSortingOrder($analyzed_sql_results) {
return $GLOBALS['cfg']['RememberSorting']
    &&!(
        $analyzed_sql_results['is_count']
        || $analyzed_sql_results['is_export']
        || $analyzed_sql_results['is_func']
        || $analyzed_sql_results['is_analyse']
    )&&
    $analyzed_sql_results['select_from']&&
    (
        empty($analyzed_sql_results['select_expr'])||
        count($analyzed_sql_results['select_expr'])==1&&
        $analyzed_sql_results['select_expr'][0] == '*'
    )
    && count($analyzed_sql_results['select_tables']) == 1;
}

Ответ 23

|| ((count($analyzed_sql_results['select_expr']) == 1

Это то, что я изменил в строке 614, и phpmyadmin работает без ошибок. Нужен один ( до подсчета и один ) до ==. Это.

Ответ 24

Для моей версии phpmyadmin (4.6.6deb5) я нашел строку 613 и понял, что скобки count() не были закрыты должным образом. Чтобы исправить это временно до следующего выпуска, просто измените:

|| (count($analyzed_sql_results['select_expr'] == 1)

чтобы:

|| (count($analyzed_sql_results['select_expr']) == 1

Ответ 26

На Ubuntu 18.04 с MariaDb и Nginx я решил его с обновлением файла /usr/share/phpmyadmin/libraries/sql.lib.php следующим образом:

|| (count($analyzed_sql_results['select_expr']) == 1

Ответ, упомянутый @Nguyen, вызывает 500 ошибок:

FastCGI sent in stderr: "PHP message: PHP Parse error:  syntax error, unexpected ')', expecting ';' in /usr/share/phpmyadmin/libraries/sql.lib.php on line 614"

Ответ 27

Привет, решает мою же проблему абсолютно (импорт/экспорт и т.д.):

Исправить ошибку Phpmyadmin [plugin_interface.lib.php] + Php7.2 + Ubuntu 16.04

поэтому... под ubuntu 18.04, mysql, php7.2: Terminal:

sudo gedit /usr/share/phpmyadmin/libraries/plugin_interface.lib.php

Найдите следующую строку (ctrl + f):

if ($options != null && count($options) > 0) {

это было в строке # 551 для меня

и измените следующее:

if ($options != null && count((array)$options) > 0) {

ctrl + s для сохранения изменений

и в терминале: ctrl + c для возврата назад...

и: sudo systemctl restart apache2

"Я думаю, что в новой версии php.It can not использовать count() или sizeof() с типом un array. Силовой параметр для массива - простой способ решить эту ошибку,..."

Спасибо за оригинального автора за решение проблемы! Я пытаюсь поделиться им!

Ответ 28

Функция is_countable, представленная в (PHP 7> = 7.3.0)

is_countable - убедитесь, что содержимое переменной является исчисляемым значением.

используйте эту функцию следующим образом:

is_countable ( $var )

Он вернет логическое значение. Для получения более подробной информации, пожалуйста, посетите http://php.net/manual/en/function.is-countable.php

Ответ 29

Посмотрите: https://devanswers.co/problem-php-7-2-phpmyadmin-warning-in-librariessql-count/

Во-первых, сделайте резервную копию sql.lib.php перед редактированием. Отредактируйте sql.lib.php в нано.

$ sudo nano/usr/share/phpmyadmin/libraries/sql.lib.php

Нажмите сочетание клавиш CTRL + W и выполните поиск (count ($ analy_sql_results ['select_expr'] == 1)

Замените его на ((count ($ analysis_sql_results ['select_expr']) == 1)

Сохраните файл и выйдите. (Нажмите CTRL + X, нажмите Y, а затем нажмите ENTER)