【发布时间】:2020-08-23 03:15:47
【问题描述】:
请不要关闭这个问题,它不是重复的,并且解释如何在 MySQL 上使用引号的建议链接对我没有任何作用,因为这个问题在 WP 脚本中。谢谢
我正在尝试在 干净 Windows 2019 Server 虚拟机上安装 WP 5.4.1。
我没有使用Microsoft Web Platform Installer,因为它会下载旧版本的 WP/MySQL 和 PHP,所以我正在尝试从头安装。
以下是我采取的步骤:
- 下载并安装最新
PHP 7.4.5,非线程安全版本 并安装它 - 将
php.ini-production重命名为php.ini -
将 php.ini 编辑为:
- upload_max_filesize = 64M
- post_max_size = 64M
- max_execution_time = 300
- extesion=mysqli(这里去掉了分号,因为 PHP 需要这个驱动来连接 MySQL8)
在 IIS 中,我创建了 *.php 映射并添加了 default.php 和 index.php
创建虚拟
phpinfo.php文件并在IIS上测试,一切正常,phpinfo()显示数据-
已下载
MySQL 8.0.20并使用以下选项进行安装:- 仅限服务器
- 独立
- 服务器计算机
- 对于身份验证方法,我按照 PHP 安装程序的建议选择“使用 Stron 密码加密”
将 MySQL BIN 文件夹添加到
path环境变量中-
打开
%PROGRAMDATA%\MySQL\MySQL Server 8.0\my.ini并禁用 sha2 并启用 native_password:- ;default_authentication_plugin=caching_sha2_password
- default_authentication_plugin=mysql_native_password
为 WP 创建了一个新数据库,名为
wp1(在 MySQL 8 中,同时创建用户和授予访问权限的“单行”不起作用,因此我们需要在2 行)
mysql -u root -p
create database wp1;
CREATE USER ‘wp1’@’%’ IDENTIFIED BY ‘password’;
GRANT ALL PRIVILEGES ON wp1.* TO ‘wp1’@’%’;
FLUSH PRIVILEGES;
EXIT
创建文件夹
C:\intepub\wwroot\wp1并授予对IUSR和Userswindows 组的完全访问权限,以便 WP 可以编写配置文件在 IIS 中,右键单击
Default Web Site,然后单击指向新的wp1文件夹的Add Application- 导航到
localhost/wp1开始安装WP
所以在选择语言并输入数据库信息后,我得到了这个错误
WordPress database error Unknown column ‘wp_’ in ‘field list’ for query SELECT wp_
经过几个小时的努力,我发现了:
- 错误来自 DB,而不是 WP。
- 在安装过程中尝试了
wp1和root用户 - 在安装过程中尝试使用
localhost和127.0.0.1 - 在 setup-config.php 文件第 315 行 $wpdb->query("SELECT $prefix") 中生成错误
- 似乎问题在于到达 MySQL 的是字符串 select wp_ insted of select 'wp_'(注意缺少的引号)
- 如果我转到 MySQL 并执行 select wp_ 我得到完全相同的错误
所以这个问题似乎与 MySQL 8.0 如何处理它从 WP 安装程序接收的查询中的引号有关......
我在安装 MySQL 8.0.20 之前恢复了一个快照,这一次,而不是
Use Strong Password Encryption for Authentication
我选择了
Use Legacy Authentication Method (Retain MySQL 5.x Compatibility) 但报错还是一样
在回答之前,请考虑:
- 我正在寻求解决问题,而不是开始讨论我应该使用 MySQL 5.x 而不是 MySQL 8.x
- 是的,数据库连接正常,不是问题,请阅读我的所有帖子
- 是的,正在使用正确的值写入 wp-config
即使很艰难,我在 WP 论坛上也看到了许多带有相同错误的消息,它们通常没有答案,或者答案没有任何意义(比如要求 OP 检查数据库凭据并写入对 WP 文件夹的访问权限),still I posted on the WP forum,但我还没有回答。
抱歉我的格式不好!
有人可以帮忙吗?
【问题讨论】:
-
奇怪的是,我认为它正在做它应该做的事情。有问题的代码是
$errors = $wpdb->hide_errors(); $wpdb->query( "SELECT $prefix" ); $wpdb->show_errors( $errors ); if ( ! $wpdb->last_error ) { ( // MySQL was able to parse the prefix as a value, which we don't want. Bail.) wp_die( __( '<strong>Error</strong>: "Table Prefix" is invalid.' ) ); }所以该行应该是失败的,但它应该继续 -
@aynber 我也没有收到
table prefix is invalid文本,但如果我输入了无效前缀,我会收到table prefix is invalid消息。所以你是对的,不知何故 WP 在 MySQL 内部出现错误后停止了脚本执行 -
@anyber 是否有某种
halt on error或stop on error需要在 PHP 或 MySQL 中配置而我错过了这一步? -
您可能需要检查 php.ini 中的 PHP 错误设置。我现在不能告诉你它应该是什么。
hide_errors()/show_errors()应该抑制该特定错误,因此可能出于某种原因hide_errors未将 show_errors 设置为 false。 (在 wp-includes/wp-db.php 中查找确切的代码) -
@aynber php.ini 有
display_errors = Off