Ubuntu 18.04下安装好 MySQL5.7, PHP7.2及 phpMyAdmin 4.6.6并配置好用户名和密码以后,进入phpMyAdmin后,查看任一数据库下的表格时,会遇到以下报错:
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 'information_schema', string 'CHARACTER_SETS', NULL, NULL, NULL, NULL, NULL, NULL, string '', string './themes/pmahomme/img/', NULL, NULL, NULL, string 'SELECT * FROM `CHARACTER_SETS`', NULL, NULL, ) ./sql.php#221: PMA_executeQueryAndSendQueryResponse( array, boolean true, string 'information_schema', string 'CHARACTER_SETS', NULL, NULL, NULL, NULL, NULL, NULL, string '', string './themes/pmahomme/img/', NULL, NULL, NULL, string 'SELECT * FROM `CHARACTER_SETS`', NULL, NULL, ) ./index.php#53: include(./sql.php)
搜索了一下,发现了好多人都遇到了同样的问题,原因可能是phpMyAdmin4.6.6和PHP7.2不完全兼容引起的。
phpMyAdmin新版本4.8以上应该解决了这个问题,不过现在还没法通过apt升级,需要自己手动升级。
stackoverflow上有网友给出了修改/usr/share/phpmyadmin/libraries/sql.lib.php文件的解决方法:
最高票答案是修改第614行,把
&& ($analyzed_sql_results['select_expr'][0] == '*')))
修改成:
&& ($analyzed_sql_results['select_expr'][0] == '*'))
这样修改后,原来的报错没有了,不过又报错500 Internal server error,还是有问题。
另外一个答案,是修改/usr/share/phpmyadmin/libraries/sql.lib.php第613行,把
|| (count($analyzed_sql_results['select_expr'] == 1)
修改成
|| ((count($analyzed_sql_results['select_expr']) == 1)
这个方法完美解决了问题。