繁体   English   中英

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

[英]phpmyadmin - count(): Parameter must be an array or an object that implements 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?

使用以下命令编辑文件/usr/share/phpmyadmin/libraries/sql.lib.php

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

在第613行,由于$analyzed_sql_results['select_expr']之后没有右括号,count 函数的计算结果总是为真。 进行以下替换可以解决此问题,然后您需要删除第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

最简单的方法:

只需在终端中运行下面的命令行,然后返回到 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

Find for count($analyzed_sql_results['select_expr'] code on file. 你可以在第 ~ 613行得到这个。你可以在错误代码下面看到这个

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

只需用下面的代码替换那个错误的代码

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

保存文件并进入PhpMyAdmin

现在它工作正常:)

在 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 )

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

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

|| ( (count($analyzed_sql_results['select_expr'] ) == 1) && ($analyzed_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;
 }

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

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

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

3.) 将最新phpmyadmin的所有文件解压到/usr/share/phpmyadmin/目录下。

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

define('CONFIG_DIR', '');

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

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

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

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

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

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

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

这对我有用

如果有人在 DB 导出页面中出现类似错误(我在 Ubuntu 18.04 中遇到了这个问题),则将文件/usr/share/phpmyadmin/libraries/plugin_interface.lib.php第 551 行替换为代码

if ($options != null && (is_array($options) || $options instanceof Countable) && count($options) > 0) {
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

phpmyadmin 4.7.4 应该具有“修复了与 PHP 7.2 的几个兼容性问题”

您可能有旧版本的 phpmyadmin。

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

在 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并搜索以下功能:

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

它对我有用..祝你好运

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;

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

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

按 ctrl+w 搜索 (count($analyzed_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

尝试在文件中替换此函数:/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;
}

我认为最好的选择是将 Phpmyadmin 更新到已修复此问题的版本。

在它作为 deb 发布之前,您可以像在@crimson-501 答案中那样做,我将在下面复制:

  • 您的第一步是从官方 Ubuntu 存储库安装 PMA (phpMyAdmin): apt-get install phpmyadmin
  • 接下来, cd 进入 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.9.4/phpMyAdmin-4.9.4-english.zip"让我解释一下这个命令的参数,-P 定义路径,“link.zip”是当前(7/17/18)PMA 的最新版本。 您可以在此处找到这些链接。
  • 对于下一步,您需要解压缩( apt-get install unzip ): unzip phpMyAdmin-4.9.4-english.zip 我们刚刚解压缩 PMA,现在我们将把它移到它的最终家。
  • 让我们使用cp (复制)命令来移动我们的文件! 请注意,我们必须添加-r参数,因为这是一个文件夹。 cp -r phpMyAdmin-4.9.4-english phpmyadmin
  • 现在是时候清理了: rm -rf phpMyAdmin-4.9.4-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! */

现在保存并关闭文件。

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

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;

为我工作.. 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。

完成!!!

对于我的 phpmyadmin (4.6.6deb5) 版本,我找到了第 613 行,并意识到 count() 括号没有正确关闭。 要在下一个版本之前暂时修复此问题,只需更改:

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

到:

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

这在 PHPMyAdmin 的更高版本中得到了修复。 Ubuntu 18.04.2 的 Ubuntu 软件存储库包含版本 4.6.6.5,而它们目前的版本为 4.9.0.1。 更新您的 PHPMyAdmin 安装将解决此问题,但可能证明比仅编辑那一行代码风险更大。 这是我在 Ubuntu Server 上的做法。 所有操作系统的步骤基本相同(具有不同的路径)。

  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”质量的东西来说,速度增加是纯粹的魔法。

适用于 UBUNTU 16.04.3 刚打开

usr/share/libraries/sql.lib.php

修改

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

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

这对我有用;

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

线路编号 : 614

替换两个代码:

替换:

(count($analyzed_sql_results[‘select_expr’] == 1)

与:

(count($analyzed_sql_results[‘select_expr’]) == 1)

替换:

($analyzed_sql_results[‘select_expr’][0] == ‘*’)))

与:

($analyzed_sql_results[‘select_expr’][0] == ‘*’))

保存,退出并运行

sudo service apache2 restart

这在Ubuntu 18.04上对我很有效。

打开sql.lib.php文件

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

替换这个错误的代码:

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

有了这个:

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

保存文件。

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

sudo service apache2 restart

并刷新PhpMyAdmin

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

编辑文件 '/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));"

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

修复错误 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

找到以下行(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 版本中。它不能使用具有 un 数组类型的 count() 或 sizeof()。强制参数到数组是解决此错误的简单方法,...”

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

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

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

只需更正/usr/share/phpmyadmin/libraries/sql.lib.php文件中第 604 行到 615 行的count()函数和右括号:

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

使用提升的权限打开/usr/share/phpmyadmin/sql.lib.php文件,并在函数PMA_isRememberSortingOrder()编辑以下内容:

  1. ~ 第 613 行修复初始错误:
    • 替换|| count($analyzed_sql_results['select_expr'] == 1) || count($analyzed_sql_results['select_expr'] == 1)
    • || (count($analyzed_sql_results['select_expr']) == 1) || (count($analyzed_sql_results['select_expr']) == 1)
  2. ~ 第 614 行修复可能会出现的 500 错误:
    • 替换&& ($analyzed_sql_results['select_expr'][0] == '*')))
    • && ($analyzed_sql_results['select_expr'][0] == '*'))

重新启动 Apache 服务器: sudo service apache2 restart

在基于 Ubuntu 18.04、PhpMyAdmin 4.6.6 和 PHP 7.2 的 Linux Mint 19.1 上测试。

我尝试了上述所有解决方案,但对我不起作用。

试试这个:-

安装所需版本的 PHP(在我的情况下为 7.0),然后在终端中,键入

sudo update-alternatives --config php

输出将是这样的:-

在此处输入图片说明

然后您只需输入选择编号(在我的情况下为 1)即可切换到任何版本的 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;
}

添加 phpmyadmin ppa

sudo add-apt-repository ppa:phpmyadmin/ppa
sudo apt-get update
sudo apt-get upgrade
add-apt-repository ppa:phpmyadmin/ppa
apt-get clean
apt-get update
apt-get purge phpmyadmin
apt-get install phpmyadmin

在 Ubuntu 18.04 上为我修复了它。

我已将备份上传到一个表,打开我看到这个表:

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?

我已将备份上传到一个表,打开我看到这个表:

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?

我已将备份上传到一个表,打开我看到这个表:

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?

在具有MariaDb和Nginx的Ubuntu 18.04上,我通过更新文件/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"

(PHP 7> = 7.3.0)中引入的is_countable函数

is_countable —验证变量的内容是否为可计数的值。

按照以下方式使用此功能::

is_countable ( $var )

它将返回布尔值。 有关更多详细信息,请访问http://php.net/manual/en/function.is-countable.php

根据@jbator 的回答,您可以编辑/usr/share/phpmyadmin/libraries/plugin_interface.lib.php并替换此行:

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

用这些行:

if ($options != null &&
   ((is_array($options) || $options instanceof Countable) && count($options) > 0) ||
   (method_exists($options, 'getProperties') && $options->getProperties() != null && (is_array($options->getProperties()) || $options->getProperties() instanceof Countable) && count($options->getProperties()) > 0)) {

这样,我们将不会有空的导出文件。

看看: https : //devanswers.co/problem-php-7-2-phpmyadmin-warning-in-librariessql-count/

首先,在编辑之前备份sql.lib.php。 在nano中编辑sql.lib.php。

$ 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)

保存文件并退出。 (按Ctrl + X,按Y,然后按Enter)

这些解决方案都不适合我,您需要将phpmyadmin更新为最新版本,请按照此处的说明进行操作

https://askubuntu.com/questions/947805/how-to-upgrade-phpmyadmin-revisited

这是我利用Chandra Nakka的答案拼凑的自动修补脚本。

FILE="/usr/share/phpmyadmin/libraries/sql.lib.php"
PATTERN="(count(\$analyzed_sql_results\['select_expr'\] == 1)"

echo "Verifying broken code in $FILE"

if grep -q "$PATTERN" "$FILE"; then
  LINE_NUMBER=$(grep -n "$PATTERN" "$FILE" | cut -d : -f 1)
  echo "Broken code found on line: $LINE_NUMBER"
  BEFORE_CODE=$(sed -n "$LINE_NUMBER"p "$FILE")

  echo -e "\nCreating backup of $FILE"
  sudo cp "$FILE" "$FILE-backup-$(date +"%Y-%m-%dT%H%M%S")"
  echo "Backup created at: $FILE-backup-$(date +"%Y-%m-%dT%H%M%S")"

  echo -e "\nApplying fix"
  sudo sed -i "s/|\s*\((count(\$analyzed_sql_results\['select_expr'\]\)/| (\1)/g" $FILE
  AFTER_CODE=$(sed -n "$LINE_NUMBER"p "$FILE")

  # Trim before and after code with xargs
  echo "BEFORE: $(echo $BEFORE_CODE | xargs)"
  echo " AFTER: $(echo $AFTER_CODE | xargs)"
else
  echo "Broken code not found. Maybe it's already been patched 🤷"
fi

由于conf文件中代码中的错误可能会有所不同(@Jacky Nguyen与@ĦΔŇĐŘΔΔŇΔҜҜΔΔ答案),
通用解决方案的答案是
a)更正conf文件中的条件逻辑以使其有意义
(x)或b)安装正确/当前的phpmyadmin

至于)

  1. 用错误代码打开文件
    对于终端用户: sudo nano /usr/share/phpmyadmin/libraries/sql.lib.php
    对于普通人: sudo gedit /usr/share/phpmyadmin/libraries/sql.lib.php

  2. 找到条件-基本上搜索$analyzed_sql_results['select_expr']

  3. 现在的逻辑应该是检查此子数组是否为空,或者是否只有1个值为“ * ”的元素

  4. 所以基本上是块
    && $analyzed_sql_results['select_from']
    && count($analyzed_sql_results['select_tables']) == 1
    应该看起来像这样

 && ( empty($analyzed_sql_results['select_expr']) //the sub array is empty, || //or, ( (count($analyzed_sql_results['select_expr']) == 1) //it has just 1 element && //and at the same time ($analyzed_sql_results['select_expr'][0] == '*') //the 1 element value is "*" ) ) 

这是一个很好的例子,说明了如果正确无误地缩进和美化您的代码,我相信这永远不会发生,或者至少会更容易找到。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM