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

匿名 (未验证) 提交于 2019-12-03 01:10:02

问题:

I've uploaded the backup to a table, opening the table I see this:

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) 

Inside phpMyAdmin...

PHP is 7.2, the server is Ubuntu 16.04, installed yesterday.

Looking for I saw that some have this error in their code, but I did not find anyone who received it in phpMyAdmin...

What should I do? Is that my error? A phpmyadmin error? wait update ? I go back to PHP 7.1?

回答1:

Edit file /usr/share/phpmyadmin/libraries/sql.lib.php:

sudo nano /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 


回答2:

Easiest Method:

Just run this below command line in terminal and come back to PhpMyAdmin. Now it works fine :)

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

Manual Method:

Open sql.lib.php file

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

Find for count($analyzed_sql_results['select_expr'] code on file. You can get this at line ~613. You can see this below wrong code

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

Just replace that wrong code with this below one

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

Save the file and come to PhpMyAdmin.

Now it works fine :)



回答3:

tested on Debian, should works on Ubuntu:

1.) First download latest phpMyadmin file.

2.) Delete (make a backup) all previous version file located in /usr/share/phpmyadmin directory.

3.) Uncompress to /usr/share/phpmyadmin/ directory all files of latest phpmyadmin.

4.) Modify file libraries/vendor_config.php and change line:

define('CONFIG_DIR', ''); 

to

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

and

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

to

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

5.) restart apache server and done.



回答4:

phpmyadmin 4.7.4 is supposed to have "Fixed several compatibility issues with PHP 7.2"

Chances are you have an older version of phpmyadmin.

https://www.phpmyadmin.net/news/2017/8/24/phpmyadmin-474-released/



回答5:

I found this PHP 7.2 count() - SYNTAX error in sql.lib.php

That perfectly works on my config:

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

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

Change line: Move parenthesis before ==

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

in

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;  } 


回答6:

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

this worked for me



回答7:

If someone have similar error in DB export page (I had this issue in Ubuntu 18.04), then replace line 551 in file /usr/share/phpmyadmin/libraries/plugin_interface.lib.php with code

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


回答8:

Proceed following steps at ubuntu-18.04:

Step 1) locate sql.lib.php

It will show something like:

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

Step 2) Open terminal (Alt t) and write:

sudo /usr/sbin/pma-configure 

Step 3)sudo gedit /usr/share/phpmyadmin/libraries/sql.lib.php and search below function:

       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;      }  

Step 4) Replace above function with:

       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;      }  

Step 4) Save & close file and below command on terminal

sudo /usr/sbin/pma-secure 

Step 5) sudo service mysql reload

Step 6) sudo service apache2 reload

It works for me.. Goodluck



回答9:

Warning in ./libraries/plugin_interface.lib.php#532

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

couse of phpmyadmin’s library try to count some parameter. At this line 532, I found this code in this path.

Edit File /usr/share/phpmyadmin/libraries/plugin_interface.lib.php at line 532:

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

Find the line if ($options != null && count($options) > 0) { and replace count($options) with count((array)$options).

Restart Apache Service:

sudo service apache2 restart 

In new php version it can’t use count() or sizeof() with un array type. So you have to forcefully change the parameter to array here.



回答10:

Works on UBUNTU 16.04.3 Just open

usr/share/libraries/sql.lib.php

modify

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

To

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



回答11:

Try replace this function in file: /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; } 


回答12:

Edit file '/usr/share/phpmyadmin/libraries/sql.lib.php' Replace: (make backup)

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

With:

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


回答13:

Upgrade to phpMyAdmin 4.8.3. this solves the PHP 7.2 compatibility issues



回答14:

Easiest way is manually edit the bug: Fix Bug Phpmyadmin [plugin_interface.lib.php] + Php7.2 + Ubuntu 16.04



回答15:

I had this issue when using windows and the responses above solved it for me, however when i switched to linux (ubuntu 18.04 LTS) I had the same issue and couldn't figure out how to solve it because I didn't see the file '/usr/share/phpmyadmin/libraries/sql.lib.php'.

This sql.lib.php file wasn't in the share folder or the phpmyadmin/libraries folder of my /opt/lampp directory - since I was using xampp on my ubuntu. Based on the update made to the xampp (because I used the latest installation as of now) setup.

The answer is still to replace: (count($analyzed_sql_results['select_expr'] == 1)

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

However the file to look for is Sql.php found in /opt/lampp/phpmyadmin/libraries/classes/Sql.php

Future updates or if you still don't find it: use grep -r 'count($analyzed_sql_results' /opt/lampp/phpmyadmin to search for matching documents in your directory and edit accordingly



回答16:

On Ubuntu 18.04 with MariaDb and Nginx, I solved it with updating file /usr/share/phpmyadmin/libraries/sql.lib.php as follows:

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

The answer mentioned by @Nguyen throws a 500 error saying:

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


回答17:

Edit file '/usr/share/phpmyadmin/libraries/sql.lib.php'

see error on your error

./libraries/sql.lib.php#2038: PMA_isRememberSortingOrder(array) ./libraries/sql.lib.php#1984: PMA_executeQueryAndGetQueryResponse(

go to this line and remove the function call.

It works for me. Thank you



回答18:

There is no need to use count if it is has single value or not because this is issue in first place. You can read more about it here http://php.net/manual/en/function.count.php

Now count will not work on NULL, Boolean, String, Integer. This is the reason here and you have to only replace the count with empty.

Check out what I did

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


回答19:

Hi the following solve my same problem absolutely (import/export and so on):

Fix Bug Phpmyadmin [plugin_interface.lib.php] + Php7.2 + Ubuntu 16.04

so... under ubuntu 18.04, mysql, php7.2: Terminal:

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

Find the following line(ctrl+f):

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

it was on line #551 for me

and change for following:

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

ctrl+s for save the changes

and in terminal: ctrl+c for get back promt...

and: sudo systemctl restart apache2

"I think in new php version.It can’t use count() or sizeof() with un array type. Force parameter to array is easy way to solve this bug,..."

Thanks for the original author for the problem solving! I try to share it!



回答20:

put @count() where it giving the error it will Hide the error ..

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

Hope this will Fix the problem



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!