更新 WordPress 以使用 mysqli 而不是 mysql

Posted

技术标签:

【中文标题】更新 WordPress 以使用 mysqli 而不是 mysql【英文标题】:Updating WordPress to use mysqli instead of mysql 【发布时间】:2016-03-29 18:17:16 【问题描述】:

我正在更新一个旧网站,该网站使用一些集成的纯 php 代码运行最新版本的 WordPress。 PHP 代码使用旧的mysql_ 函数来运行数据库查询,因为我将 PHP 版本升级到 5.6,所以我必须摆脱这些。

我开始只是简单地将mysql_ 替换为mysqli_,但是,这会导致以下问题。如果您有一个以前有效的查询:

mysql_query("SELECT...");

现在它会抛出错误,因为 mysqli_query("SELECT...") 期望第一个参数是与数据库的连接。

我能想到的解决方案之一是在任何地方使用$wpdb,而不是普通的mysql函数,但是,代码有数千个查询,替换所有查询会有点问题,因为@ 987654327@函数后面通常跟mysqli_fetch

我倾向于的解决方案是以某种方式从 WordPress 使用的数据库中获取连接,将其保存在一个变量中,比如说 $con,然后只需搜索并用 @987654331 替换所有当前的 mysqli_query( @。我认为这应该可行,但我不知道如何初始化 $con 变量,因为似乎无法从 $wpdb 变量中获取连接?所以这里有两个问题:

    真的有办法通过$wpdb 或其他WordPress 方法初始化$con 变量吗?

    如果答案是否定的,那么通过创建到数据库的新 mysqli 连接并使用它来运行查询来实际初始化 $con 是否明智? (我知道答案是否定的,但因此缺乏解决方案我可能不得不在最后考虑这个选项......)

还有一个额外的问题:谁能从我已经提到的问题中想出一个更好的解决方案/解决方法?

谢谢!

【问题讨论】:

【参考方案1】:

首先,检查这个tool。它可以帮助从mysql_* 迁移到mysqli_*

如果没有,只需扩展 wpdb

    为“$dbh”编写一个带有 getter 的类:

    在任何地方都使用它而不是基类(这个link 可以帮忙)

【讨论】:

谢谢,我自己才想出怎么做。您实际上可以声明一个 'global $wpdb' 然后使用 '$wpdb->dbh' 作为 mysqli_query() 等中的第一个参数。谢谢!

以上是关于更新 WordPress 以使用 mysqli 而不是 mysql的主要内容,如果未能解决你的问题,请参考以下文章

修改插入以进行更新

需要帮助在 Wordpress 中将 MySQL 转换为 MySQLI

如何使用 mysqli->prepare 执行更新?

什么时候应该使用 MySQLi 而不是 MySQL?

如何更新 Wordpress ajaxurl 变量以使用 SSL?

用 ajax 更新而不是替换 wordpress 自定义字段