编译的 PHP 7 在 WordPress 中缺少 mysql 扩展

Posted

技术标签:

【中文标题】编译的 PHP 7 在 WordPress 中缺少 mysql 扩展【英文标题】:Compiled PHP 7 missing mysql extension in WordPress 【发布时间】:2016-03-21 06:52:53 【问题描述】:

我已经使用适用于以前版本的 php 的配置构建了 PHP 7。 现在我的 WordPress 网站收到消息:

您的 PHP 安装似乎缺少 WordPress 所需的 mysql 扩展。

使用 mysqli 的其他网站也可以。我错过了什么?

我还包含了所有名称中带有 mysql 的 .so 文件:

extension=dba.so
extension=mysql.so
extension=mysqli.so
extension=mysqlnd_mysql.so
extension=mysqlnd_mysqli.so
extension=mysqlnd.so
extension=pdo.so
extension=pdo_mysql.so
extension=pdo_odbc.so
extension=odbc.so

【问题讨论】:

很可能会有大量的 Wordpress 用户面临类似的问题。这个问题和答案可以通用吗? 好问题顺便说一句,这可以帮助那些没有意识到 PHP 7.0 中删除了扩展的未来人 【参考方案1】:

在 Ubuntu 上,我通过运行修复了这个错误

sudo apt-get install php-mysql

然后重新启动我的服务器(caddy,但您可能使用的是 apache 或 nginx)。

source

【讨论】:

【参考方案2】:

这个问题是由 php 7.1.0-dev 引起的。

我用相同的配置版本 7.0.0 构建了另一个,问题已解决。

这与 WordPress 无关,因为它会在找不到 MySQL 时自动尝试使用 MySQLi。至少在 WP 4.4 中。

【讨论】:

... 如果您使用的不是最新版本的 WordPress,您应该使用 - 因为之前版本存在安全问题。 WordPress 不断升级的原因:-)【参考方案3】:

mysql_* 函数在 PHP 7.0 中被删除,将您的代码更新为 mysqli 或 PDO

如果您正在处理用户输入,还请查看准备好的语句。减少SQL injections的机会

mysqli连接字符串示例:

<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_errno) 
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;

?>

pdo 连接字符串示例:

<?php
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
?> 

注意:

那个 mysqli 示例处理连接错误

【讨论】:

我该怎么做?快速谷歌并没有透露某种设置来改变它。 不,mysqli就像mysql_*函数只是代码我会添加一个例子 还阅读了手册,它解释了您需要了解的所有内容。 wp-db.php 有一些与 mysqli 相关的有趣变量。 为什么不赞成投票的人真的很想知道,所以我可以改进我将来给出的答案:)【参考方案4】:

PHP 7 已经完全删除了 mysql_*。

您需要使用 PDO 或 mysqli。 Wordpress 似乎不支持这一点。

【讨论】:

mysql_* 在 PHP 7 中已被完全删除,不仅是对它们的支持,如果我错了,请纠正我 我没有发现这个答案很有帮助。 PDO 或 mysqli 更适合 Wordpress 网站吗?升级需要做什么? 他们不这样做真是太疯狂了(在 18 年仍然没有)——这真的应该由他们来排序【参考方案5】:

正如在其他地方提到的,ext/mysql 函数已被删除。我们一直是talking about this for some time。

ext/mysql 是为 MySQL 3.23 构建的,从那时起只添加了很少的内容,同时主要保持与旧版本的兼容性,这使得代码更难维护。

如果您一心想将它们放回原处,可以使用 ext/mysql PECL Library 将它们重新添加到 PHP 7 中

需要注意的是Wordpress 3.9 or later supports mysqli

在 WordPress 3.9 中,我们为 WPDB 添加了一个额外的层,使其在使用 PHP 5.5 或更高版本时切换到使用 mysqli PHP 库。

【讨论】:

我发现这篇文章有助于将 mysql 扩展添加回 PHP 7:ckon.wordpress.com/2015/08/06/… @phansen 我只能说这是一个非常糟糕的主意。迁移到 PDO 或 mysqli。跳过障碍来恢复已弃用的功能并不是一个好主意。【参考方案6】:

检查 Wordpress 是否仍在使用 PHP7 中删除的 Mysql 扩展。

http://php.net/manual/en/migration70.removed-exts-sapis.php

Mysqli 和 PDO 扩展被保留。这就是您的其他网站正常运行的原因。

【讨论】:

以上是关于编译的 PHP 7 在 WordPress 中缺少 mysql 扩展的主要内容,如果未能解决你的问题,请参考以下文章

您的 PHP 安装似乎缺少 WordPress 所需的 MySQL 扩展

编译安装搭建wordpress

Wordpress localhost 安装错误 - 您的 PHP 安装似乎缺少 WordPress 所需的 MySQL 扩展

Wamp 和 Xampp “您的 PHP 安装似乎缺少 WordPress 所需的 MySQL 扩展。” [复制]

LAMP 编译安装

centos7编译安装lamp实现wordpress