问题:
我正在尝试使用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()。
我已阅读以下答案:
尝试解决方案 - 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")。
答案 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" "$@"
如果我做了些蠢事让我知道,谢谢你的时间。随意要求澄清。