如何修复wp cli中的mysql\u connect()错误

ubbxdtey  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(363)

问题:
我正在尝试使用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\u connect()中。
我通读了以下答案:
未定义函数mysql\u connect()——这似乎建议下载一些包。我不太愿意这样做,因为我不明白他们在做什么(目前我正在使用mamp运行php,所以我不确定这是否会给我带来更多问题),但这确实向我表明,问题出在php.ini上,它通知了下面尝试的解决方案。
致命错误:调用未定义的函数mysql\u connect()-我认为我的登录详细信息中没有错误(站点本身可以工作),所以这似乎不是问题所在
尝试的解决方案-php.ini
当我通过

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\u cli\u php\u args,我正在尝试将其放入。现在我不是一个编码超级明星,但似乎我需要构建一个bash脚本来充当 Package 器,因为它们在.phar版本中不起作用,所以我结合了在web上找到的两个 Package 器来创建这个:


# !/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" "$@"

当我运行这个时,它会发出各种各样的抱怨。我想我犯了一些基本的错误(我还将“export wp\u cli\u php\u args=/c/mamp/bin/php/php7.2.1/php.ini production”放在了我的.bash\u配置文件中。

u1ehiz5o

u1ehiz5o1#

mysql_connect() 从PHP5.5开始,已弃用,并在PHP7中删除。php5.5不是php的受支持版本,因此作者应该更新他们的代码。
使用 mysqli_connect() 相反。

vbopmzt1

vbopmzt12#

看起来您的wordpress安装正在尝试使用 mysql_connectwp-db.php . wordpress默认使用 mysql_connect 如果找不到 mysqli 已安装或已覆盖。 mysqli 随PHP7一起安装(您正在使用PHP7)。
所以,检查一下 wp-config.php 并确认 WP_USE_EXT_MYSQL 定义为 false

tpxzln5u

tpxzln5u3#

好的,好的。
所以这个问题被wpdb标记了出来,看起来好像mysql没有工作,但它是mysqli。最后,我得到了php.ini文件的工作,但我想我会张贴所有的各种解决方案,可能会帮助别人。第四条对我来说很有用。
1) 关闭mysql\u connect以强制wordpress使用mysqli\u connect。转到wp-config.php并添加行

define('WP_USE_EXT_MYSQL', false);

2) 检查php.ini文件在configure命令框中是否存在“--with mysqli=shared”?
3) 更新你的mysqli。我没有做这个,但接下来的建议似乎是在shell中运行这个。

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

我在windows上运行git bash,所以这对我来说是一堆废话。如果你在linux上,这可以工作。
4) 如上所述,我注意到php.ini没有在wp--info中给出。我使用找到了正确的文件(只需用它创建一个文件,然后从服务器访问它)。结果这个地方和我预想的不一样。然后我摆弄了一下上面的bash Package 器,最终得到了这个,这使得错误消失了:


# !/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" "$@"

如果我做了什么蠢事,请告诉我,谢谢你的时间。随时要求澄清。

相关问题