phpmyadmin - count():参数必须是实现Countable的数组或对象

ale*_*bal 385 phpmyadmin 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)
Run Code Online (Sandbox Code Playgroud)

在phpMyAdmin里面......

PHP是7.2,服务器是Ubuntu 16.04,昨天安装.

寻找我看到有些人在他们的代码中有这个错误,但我没有找到任何人在phpMyAdmin中收到它...

我该怎么办?这是我的错误吗?一个phpmyadmin错误?等待更新?我回到PHP 7.1?

小智 684

编辑文件/usr/share/phpmyadmin/libraries/sql.lib.php:

sudo nano /usr/share/phpmyadmin/libraries/sql.lib.php
Run Code Online (Sandbox Code Playgroud)

更换: $analyzed_sql_results['select_expr']

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

重启服务器apache:

((empty($analyzed_sql_results['select_expr']))
    || (count($analyzed_sql_results['select_expr'] == 1)
        && ($analyzed_sql_results['select_expr'][0] == '*')))
Run Code Online (Sandbox Code Playgroud)

  • 难以置信的.适用于Ubuntu 18.04,使用apt安装phpmyadmin. (76认同)
  • 如果您在数据库导出中遇到类似问题,则需要编辑/usr/share/phpmyadmin/libraries/plugin_interface.lib.php,第551行来自_if($ options!= null && count($ options)> 0){to _if ($ options!= null && count((array)$ options)> 0){_可能对@alperian和其他人很有意思 (19认同)
  • 也适用于我,在Ubuntu 18.04上使用apt安装了phpmyadmin ...谢谢! (6认同)
  • 我可以选择表格,但是当我尝试导出Db时返回了错误 (5认同)
  • 已报告错误:https://bugs.launchpad.net/ubuntu/+source/phpmyadmin/+bug/1767361 (5认同)
  • 这对我有用,谢谢!如果出现500错误,请检查“计数”之前的括号:`(count($ analyzed_sql_results ['select_expr'])== 1)` (3认同)
  • 这对我不起作用。我在处理请求时遇到错误错误代码:500错误文本:Internal Server Error。@Chandra Nakka的解决方案解决了我的问题。 (3认同)
  • 不需要重新启动 (3认同)
  • 不需要重新启动,但从不伤痛。 (2认同)
  • 也没有为我工作。与Jee发生了相同的错误。钱德拉·纳卡(Chandra Nakka)的方法固定。 (2认同)
  • 如果您得到500,则在引用行OP之后,我还必须删除括号。`(count($ analyzed_sql_results ['select_expr'])== 1)&&($ analyzed_sql_results ['select_expr'] [0] =='*'))) (2认同)
  • 为我工作 2020 年 2 月 4 日 (2认同)

Cha*_*kka 389

最简单的方法:

只需在终端下面的命令行运行,然后返回PhpMyAdmin.现在它工作正常:)

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

手动方法:

打开sql.lib.php文件

nano /usr/share/phpmyadmin/libraries/sql.lib.php
Run Code Online (Sandbox Code Playgroud)

查找count($analyzed_sql_results['select_expr']文件中的代码.你可以在~ 613行得到这个.你可以在下面看到错误的代码

|| (count($analyzed_sql_results['select_expr'] == 1)
Run Code Online (Sandbox Code Playgroud)

只需用下面的代码替换错误的代码即可

|| ((count($analyzed_sql_results['select_expr']) == 1)
Run Code Online (Sandbox Code Playgroud)

保存文件并转到PhpMyAdmin.

现在它工作正常:)

  • 适用于2018年8月的Ubuntu 18.04 :) (31认同)
  • Nano 的一个巧妙的小技巧是,您可以输入“nano +613 文件名”,以便直接将您带到特定的行。 (5认同)
  • 在Ubuntu 16.04上不适用于我 (4认同)
  • 已通过投票,可在2019年5月在Debian 9.8上运行 (3认同)
  • 像魅力一样工作 (2认同)
  • 适用于Ubuntu 19.04。谢谢 (2认同)
  • @SteffenNielsen 非常感谢这个有用的提示:) (2认同)
  • 2020 年 1 月起效果很好 (2认同)
  • 在 Ubuntu 18.04 服务器上为我工作 (2认同)

小智 95

在sql.lib.php中发现了这个PHP 7.2 count() - SYNTAX错误

这完全适用于我的配置:

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

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

更改行:在==之前移动括号

|| ((count($ analyze_sql_results ['select_expr'] ) == 1)&&($ analyze_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;
 }
Run Code Online (Sandbox Code Playgroud)


小智 70

在Debian上测试,应该适用于Ubuntu:

1.)首先下载最新的phpMyadmin文件.

2.)删除(备份)位于/usr/share/phpmyadmin目录中的所有先前版本文件.

3.)解压缩/usr/share/phpmyadmin/目录最新phpmyadmin的所有文件.

4.)修改文件libraries/vendor_config.php并更改行:

define('CONFIG_DIR', '');
Run Code Online (Sandbox Code Playgroud)

define('CONFIG_DIR', '/etc/phpmyadmin/');
Run Code Online (Sandbox Code Playgroud)

define('TEMP_DIR', './tmp/');
Run Code Online (Sandbox Code Playgroud)

define('TEMP_DIR', '/tmp/');
Run Code Online (Sandbox Code Playgroud)

5.)重启apache服务器并完成.

  • 适用于Ubuntu 18.04 (7认同)
  • Ubuntu 18.04,phpMyAdmin 4.8.0.1 - 我需要`mkdir/usr/share/phpmyadmin/tmp; chgrp www-data tmp; chmod g + w tmp;` (4认同)
  • 适用于Ubuntu 16.04 (3认同)

小智 37

编辑文件:'/usr/share/phpmyadmin/libraries/sql.lib.php'

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

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

这对我有用


kal*_*eem 32

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
Run Code Online (Sandbox Code Playgroud)


jba*_*tor 27

如果有人在数据库导出页面中有类似错误(我在Ubuntu 18.04中遇到此问题),则/usr/share/phpmyadmin/libraries/plugin_interface.lib.php用代码替换文件中的第551行

if ($options != null && (is_array($options) || $options instanceof Countable) && count($options) > 0) {
Run Code Online (Sandbox Code Playgroud)

  • 这可以消除错误消息,但是我认为这样可以避免一起使用if语句,并且数据库导出中我什么也没有得到(在完成数据库刷新页面后,底部显示了一堆错误)以很小的文件占用空间导出) (2认同)

Edw*_*rth 24

phpmyadmin 4.7.4应该有"修复PHP 7.2的几个兼容性问题"

有可能你有一个旧版本的phpmyadmin.

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


C13*_*3L0 24

Ubuntu 18.04 LTS

这些是对我有用的步骤。非常感谢 William Desportes 在他们的 Ubuntu PPA 上提供自动更新。

第 1 步来自 William Desportes 帖子
$sudo add-apt-repository ppa:phpmyadmin/ppa

第 2 步
$sudo apt-get --with-new-pkgs upgrade

第 3 步
$sudo service mysql restart

如果您已经重新启动mysql的问题,您也可以按以下顺序重新启动
$ sudo service mysql stop;
$sudo service mysql start;

  • 解决了 Ubuntu 18.04 LTS 上的问题。应该是公认的答案。 (2认同)

小智 23

继续执行ubuntu-18.04的以下步骤:

步骤1)找到sql.lib.php

它会显示如下:

/usr/share/phpmyadmin/libraries/sql.lib.php
Run Code Online (Sandbox Code Playgroud)

步骤2)打开终端(Alt t)并写入:

sudo /usr/sbin/pma-configure
Run Code Online (Sandbox Code Playgroud)

步骤3)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
Run Code Online (Sandbox Code Playgroud)

第5步) sudo service mysql reload

第6步) sudo service apache2 reload

它对我有用.. Goodluck


Kun*_*roy 21

打开此文件:'/usr/share/phpmyadmin/libraries/sql.lib.php'

sudo nano /usr/share/phpmyadmin/libraries/sql.lib.php
Run Code Online (Sandbox Code Playgroud)

按ctrl + w进行搜索(计数($($ analyzed_sql_results ['select_expr'] == 1))

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

Replace With:  (count($analyzed_sql_results['select_expr']) == 1)
Run Code Online (Sandbox Code Playgroud)

重新启动服务器

 sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)

此外,如果您仍然面临相同的问题,请执行以下操作。

打开此文件/usr/share/phpmyadmin/libraries/plugin_interface.lib.php

sudo nano /usr/share/phpmyadmin/libraries/plugin_interface.lib.php
Run Code Online (Sandbox Code Playgroud)

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

Ctrl+w : if ($options != null && count($options) > 0) {
Run Code Online (Sandbox Code Playgroud)

用以下代码替换

if ($options != null && count((array)$options) > 0) {
Run Code Online (Sandbox Code Playgroud)

现在保存并重新启动服务器

sudo /etc/init.d/apache2 restart
Run Code Online (Sandbox Code Playgroud)


小智 16

尝试在文件中替换此函数:/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;
}
Run Code Online (Sandbox Code Playgroud)


Pho*_*ixS 16

我认为最好的选择是将Phpmyadmin更新为已经修复过的版本.

直到它作为deb发布,你可以像@ crimson-501一样回答,我将在下面复制:

  • 第一步是从Ubuntu官方回购安装PMA(phpMyAdmin的)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"目前(7/17/18) )最新版本的PMA.你可以在这里找到这些链接.
  • 对于这一步,你需要解压(apt-get install unzip)unzip phpMyAdmin-4.8.2-english.zip.我们只是解压缩PMA,现在我们将把它移到它的最后一个家.
  • 让我们使用cp(复制)命令来移动我们的文件!请注意,我们必须添加-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.
Run Code Online (Sandbox Code Playgroud)

但是,这些问题相对容易修复.对于第一个问题,您所要做的就是抓住您选择的编辑器进行编辑,/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! */
Run Code Online (Sandbox Code Playgroud)

现在保存并关闭文件.

  • 现在我们将为PMA创建一个tmp目录:mkdir tmp&chown -R www-data:www-data /usr/share/phpmyadmin/tmp.最后一个命令允许Apache Web服务器拥有tmp目录并编辑它的内容.

  • 此链接的解决方案:https://devanswers.co/manually-upgrade-phpmyadmin/ 遵循类似的计划,只不过用更简单的步骤替换了河豚步骤。 (2认同)

ole*_*ole 15

Ubuntu 18.10(2018年12月)

第613,614,615行,替换为:

        || count($analyzed_sql_results['select_expr']) == 1
            && ($analyzed_sql_results['select_expr'][0] == '*'))
    && count($analyzed_sql_results['select_tables']) == 1;
Run Code Online (Sandbox Code Playgroud)


Top*_*koX 13

为我工作.. Ubuntu 18.04

sudo nano /usr/share/phpmyadmin/libraries/sql.lib.php
Run Code Online (Sandbox Code Playgroud)

查找count($analyzed_sql_results['select_expr']文件中的代码。您可以在〜613行获得它。

|| (count($analyzed_sql_results['select_expr'] == 1)
Run Code Online (Sandbox Code Playgroud)

只需替换为代码:

|| ((count($analyzed_sql_results['select_expr']) == 1)
Run Code Online (Sandbox Code Playgroud)

保存文件并重新加载PhpMyAdmin。

做完了!!!


ali*_*ara 9

这对我有用;

sudo nano /usr/share/phpmyadmin/libraries/sql.lib.php 
Run Code Online (Sandbox Code Playgroud)

线路编号 : 614

替换两个代码:

代替:

(count($analyzed_sql_results[‘select_expr’] == 1)
Run Code Online (Sandbox Code Playgroud)

和:

(count($analyzed_sql_results[‘select_expr’]) == 1)
Run Code Online (Sandbox Code Playgroud)

代替:

($analyzed_sql_results[‘select_expr’][0] == ‘*’)))
Run Code Online (Sandbox Code Playgroud)

和:

($analyzed_sql_results[‘select_expr’][0] == ‘*’))
Run Code Online (Sandbox Code Playgroud)

保存,退出并运行

sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)


小智 8

适用于UBUNTU 16.04.3刚刚打开

USR /股/库/ sql.lib.php

修改

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

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


Nat*_*ram 7

在更高版本的PHPMyAdmin中已修复此问题。适用于Ubuntu 18.04.2的Ubuntu软件存储库的版本为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
Run Code Online (Sandbox Code Playgroud)
  1. 备份旧的PHPMyAdmin安装。
cp -r /usr/share/phpmyadmin ~/phpmyadmin-backup
Run Code Online (Sandbox Code Playgroud)
  1. 将新的PHPMyAdmin放到旧的PHPMyAdmin上
cd phpMyAdmin-4.9.0.1-all-languages
rm -r /usr/share/phpmyadmin/doc/html
cp -R * /usr/share/phpmyadmin/
Run Code Online (Sandbox Code Playgroud)

验证它是否有效。如果没有,请...您有备份,请还原它并手动编辑有问题的行。以我个人的经验,在执行此操作后,我发现4.6.6.5版本不仅布满了错误,而且与新版4.9.0.1相比,速度也令人难以置信。速度的提高对我来说虽然是“ WordPress”质量的东西来说真是不可思议。


okl*_*klm 7

这在Ubuntu 18.04上对我很有效。

打开sql.lib.php文件

nano +613 /usr/share/phpmyadmin/libraries/sql.lib.php
Run Code Online (Sandbox Code Playgroud)

替换这个错误的代码:

|| (count($analyzed_sql_results['select_expr'] == 1)
Run Code Online (Sandbox Code Playgroud)

有了这个:

|| ((count($analyzed_sql_results['select_expr']) == 1)
Run Code Online (Sandbox Code Playgroud)

保存文件。

使用以下命令重新启动服务器:

sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)

并刷新PhpMyAdmin


HUG*_*NCO 6

升级到 phpMyAdmin 4.8.3。这解决了 PHP 7.2 兼容性问题


小智 5

编辑文件 '/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;"
Run Code Online (Sandbox Code Playgroud)

和:

"|| (count($analyzed_sql_results['select_expr']) == 1) 
&& ($analyzed_sql_results['select_expr'][0] == '*') 
&& (count($analyzed_sql_results['select_tables']) == 1));"
Run Code Online (Sandbox Code Playgroud)


小智 5

嗨,以下绝对解决了我同样的问题(导入/导出等):

修复错误 Phpmyadmin [plugin_interface.lib.php] + Php7.2 + Ubuntu 16.04

所以......在ubuntu 18.04,mysql,php7.2下:终端:

sudo gedit /usr/share/phpmyadmin/libraries/plugin_interface.lib.php
Run Code Online (Sandbox Code Playgroud)

找到以下行(ctrl+f):

if ($options != null && count($options) > 0) {
Run Code Online (Sandbox Code Playgroud)

对我来说是#551

更改以下内容:

if ($options != null && count((array)$options) > 0) {
Run Code Online (Sandbox Code Playgroud)

ctrl+s 保存更改

并在终端中:ctrl+c 返回提示...

和: sudo systemctl restart apache2

“我认为在新的 php 版本中。它不能使用具有 un 数组类型的 count() 或 sizeof()。强制参数到数组是解决此错误的简单方法,...”

感谢原作者解决问题!我试着分享!


Bik*_*ath 5

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

这是我在第 614 行更改的内容,phpmyadmin 可以正常工作,没有任何错误。需要一个(计数之前,和一个)==。就是这样。


小智 5

对于我的phpmyadmin版本(4.6.6deb5),我找到了613行,并意识到count()括号未正确关闭。要暂时解决此问题,直到下一个版本,只需更改:

|| (count($analyzed_sql_results['select_expr'] == 1)
Run Code Online (Sandbox Code Playgroud)

至:

|| (count($analyzed_sql_results['select_expr']) == 1
Run Code Online (Sandbox Code Playgroud)


小智 5

只需更正文件中count()第 604 行到 615 行的函数和右括号/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;
}
Run Code Online (Sandbox Code Playgroud)