如何解决wp cli中的mysql_connect()错误

时间:2018-06-13 10:22:25

标签: php mysql wordpress bash wp-cli

问题:

我正在尝试使用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() - 我不认为我的登录详细信息中存在错误(网站本身有效),因此 / LI>

尝试解决方案 - 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中输出"导出WP_CLI_PHP_ARGS = / C / MAMP / bin / php / php7.2.1 / php.ini-production")。

3 个答案:

答案 0 :(得分:1)

mysql_connect()deprecated, as of PHP 5.5,并在PHP 7中删除.PHP 5.5不是PHP的受支持版本,因此作者应更新其代码。

改为使用mysqli_connect()

答案 1 :(得分:0)

您的wordpress安装似乎试图在mysql_connect中使用wp-db.php。如果找不到mysql_connect或被覆盖,Wordpress默认使用mysqli

mysqli安装了php 7(你使用的是php 7)。

因此,请检查wp-config.php并确认WP_USE_EXT_MYSQL已定义为false

答案 2 :(得分:0)

是的,好的。

所以这个问题被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"出现在configure命令框中?

3)更新你的mysqli。我没有做到这一点,但是在this之后,建议似乎是在你的shell中运行它。

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

我在Windows上运行git-bash,这样就为我抛出了一大堆废话。如果您使用Linux,这可能会有效。

4)如上所述我注意到php.ini并没有在wp --info中给出。我找到了正确的文件(只需用它创建一个文件,然后从你的服务器访问它)。事实证明,这与我的预期不同。然后我摆弄上面的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" "$@"

如果我做了些蠢事让我知道,谢谢你的时间。随意要求澄清。