【问题标题】:Compiled PHP 7 missing mysql extension in WordPress编译的 PHP 7 在 WordPress 中缺少 mysql 扩展
【发布时间】: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 中删除了扩展的未来人

标签: php mysql wordpress


【解决方案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 中被删除,将您的代码更新为 mysqliPDO

    如果您正在处理用户输入,还请查看准备好的语句。减少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 扩展被保留。这就是您的其他网站正常运行的原因。

    【讨论】:

      猜你喜欢
      • 2017-12-04
      • 1970-01-01
      • 2019-02-04
      • 2014-10-24
      • 2021-03-17
      • 2011-04-03
      • 1970-01-01
      • 2016-04-19
      • 2013-07-15
      相关资源
      最近更新 更多