【问题标题】:How to fix mysql_connect() error in wp cli如何修复 wp cli 中的 mysql_connect() 错误
【发布时间】:2018-11-22 21:26:04
【问题描述】:

问题:

我正在尝试使用 wp cli 来做事。以更新 wordpress 为例:

wp core update

Fatal error: Uncaught Error: Call to undefined function mysql_connect() in 
path\to\wp-includes\wp-db.php:1564
Stack trace:
#0 path\to\wp-includes\wp-db.php(592): wpdb->db_connect()
#1 path\to\wp-includes\load.php(404): 
wpdb->__construct(details)
#2 path\to\public\wp-settings.php(106): require_wp_db()
#3 phar://path/to/wp-cli.phar/php/WP_CLI/Runner.php(1182): require('C:\\path\\to\\...')
#4 phar://path/to/wp-cli.phar/php/WP_CLI/Runner.php(1107): WP_CLI\Runner->load_wordpress()
#5 phar://path/to/wp-cli.phar/php/WP_CLI/Bootstrap/LaunchRunner.php(23): WP_CLI\Runner->start()
#6 phar://path/to/wp-cli.phar/php/bootstrap.php(75): WP_CLI\Bootstrap\LaunchRunner->process(Object(WP_CLI\Bootstrap\BootstrapState))
#7 phar://path/to/wp-cli.phar/php/wp-cli.php(23): WP_CLI\bootstrap()
#8 phar://C:/ in path/to\wp-includes\wp-db.php on line 1564

据我所知,错误在 mysql_connect() 中。

我已阅读以下答案:

  • Undefined function mysql_connect() - 这似乎建议下载一些软件包。我不愿意这样做,因为我不明白他们在做什么(目前我正在使用 MAMP 运行 php,所以我不确定这是否会给我带来更多问题)但这确实向我表明问题出在 php .ini 通知下面尝试的解决方案。
  • Fatal error: Call to undefined function mysql_connect() - 我认为我的登录详细信息没有错误(该网站本身有效),所以这似乎不是问题

尝试的解决方案 - php.ini

当我通过

检查正在使用哪个 php.ini wp cli
wp--info

命令。它打印以下内容:

OS:     Windows NT 10.0 build 17134 (Windows 10) i586
Shell:  C:\Program Files\Git\usr\bin\bash.exe
PHP binary:     C:\MAMP\bin\php\php7.2.1\php.exe
PHP version:    7.2.1
php.ini used:
WP-CLI root dir:        phar://wp-cli.phar
WP-CLI vendor dir:      phar://wp-cli.phar/vendor
WP_CLI phar path:       C:\path\to\public
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 1.5.1

所以这里似乎没有使用 php.ini。所以我认为我需要解决这个问题。为了做到这一点,我找到了我正在尝试输入的$WP_CLI_PHP_ARGS。现在我不是编码超级明星,但似乎我需要构建一个 bash 脚本来充当包装器,因为它们不起作用在 .phar 版本中,所以我结合了我在网上找到的 two 包装器来创建这个:

#!/usr/bin/env sh

dir=$(d=${0%[/\\]*}; cd "$d"; pwd)

# See if we are running in Cygwin by checking for cygpath program
if command -v 'cygpath' >/dev/null 2>&1; then
   # Cygwin paths start with /cygdrive/ which will break windows PHP,
   # so we need to translate the dir path to windows format. However
   # we could be using cygwin PHP which does not require this, so we
   # test if the path to PHP starts with /cygdrive/ rather than /usr/bin
   if [[ $(which php) == /cygdrive/* ]]; then
       dir=$(cygpath -m $dir);
   fi
fi

dir=$(echo $dir | sed 's/ /\ /g')
"${WP_CLI_PHP}" $WP_CLI_PHP_ARGS "${dir}/wp-cli.phar" "$@"

当我运行它时,它会出现各种抱怨。我想我犯了某种基本错误。 (我还在我的 .bash_profile 中添加了“export WP_CLI_PHP_ARGS=/C/MAMP/bin/php/php7.2.1/php.ini-production”)。

【问题讨论】:

    标签: php mysql wordpress bash wp-cli


    【解决方案1】:

    mysql_connect() 是deprecated, as of PHP 5.5,在 PHP 7 中被删除。PHP 5.5 不是 PHP 的支持版本,所以作者应该更新他们的代码。

    请改用mysqli_connect()。

    【讨论】:

    • 是的,我已经看到了。谢谢你。我该如何在 wp cli 中做到这一点?我尝试更改 php.ini 文件,这听起来像正确的方法吗?
    • 不,如果您需要编辑 php.ini 有问题。您使用的是哪个版本的 WordPress?
    • Wordpress 4.9.6
    • 感谢您的宝贵时间。然后我得到这个:错误:无法获取 url 'api.github.com/repos/wp-cli/wp-cli/releases?per_page=100':找不到工作传输。
    • 我的版本是 1.5.1,所以我认为这是最新的。
    【解决方案2】:

    看起来您的 wordpress 安装正在尝试在 wp-db.php 中使用 mysql_connect。如果 Wordpress 找不到已安装的 mysqli 或被覆盖,则 Wordpress 默认使用 mysql_connect。

    mysqli 随 php 7 一起安装(而您使用的是 php 7)。

    所以,检查wp-config.php 并确认WP_USE_EXT_MYSQL 被定义为false

    【讨论】:

    • 我已经添加了,但据我所知并没有改变任何东西。
    【解决方案3】:

    好的,好的。

    所以这个问题被 wp-db 标记了,它看起来好像 mysql 没有工作,但它是 mysqli。最终我得到了 php.ini 文件,但我想我会发布所有可能对其他人有帮助的各种解决方案。 4 号对我有用。

    1) 关闭mysql_connect,强制wordpress使用mysqli_connect。转到 wp-config.php 并添加行

    define('WP_USE_EXT_MYSQL', false);
    

    2) 检查配置命令框中的 php.ini 文件是否存在“--with-mysqli=shared”?

    3) 更新你的 mysqli。我没有做这个,但是按照this,建议似乎是在你的shell中运行它。

    sudo apt-get install mysql-server mysql-common php7.0 php7.0-mysql
    

    我在 Windows 上运行 git-bash,这对我来说是一大堆废话。如果你在 linux 上,这可以工作。

    4) 如上所述,我注意到 wp --info 中没有给出 php.ini。我使用找到了正确的文件(只需使用该文件创建一个文件,然后从您的服务器访问它)。事实证明,这与我预期的不同。然后我摆弄了上面的 bash 包装器,最终得到了这个,这使得错误消失了:

    #!/usr/bin/env sh
    
    dir=$(d=${0%[/\\]*}; cd "$d"; pwd)
    
    # See if we are running in Cygwin by checking for cygpath program
    if command -v 'cygpath' >/dev/null 2>&1; then
       # Cygwin paths start with /cygdrive/ which will break windows PHP,
       # so we need to translate the dir path to windows format. However
       # we could be using cygwin PHP which does not require this, so we
       # test if the path to PHP starts with /cygdrive/ rather than /usr/bin
       if [[ $(which php) == /cygdrive/* ]]; then
           dir=$(cygpath -m $dir);
       fi
    fi
    
    dir=$(echo $dir | sed 's/ /\ /g')
    php -c $WP_CLI_PHP_ARGS "${dir}/wp-cli.phar" "$@"
    

    如果我做了一些愚蠢的事情,请告诉我,感谢您的宝贵时间。随时要求澄清。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-08
      • 1970-01-01
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 2020-11-01
      相关资源
      最近更新 更多