将大型网站从 MySQL 切换到 MySQLi [重复]

Posted

技术标签:

【中文标题】将大型网站从 MySQL 切换到 MySQLi [重复]【英文标题】:Switch large website from MySQL to MySQLi [duplicate] 【发布时间】:2013-07-17 06:31:46 【问题描述】:

我想从 mysql 切换到 MySQLi,但我有一个非常大的网站。

我读到https://wikis.oracle.com/display/mysql/Converting+to+MySQLi 可以帮助我,我读到How could I change this mysql to mysqli?。它说我可以通过在函数中添加一个“i”来替换大多数函数,并且我应该开始寻找错误。

但我的网站非常复杂且庞大,需要很长时间才能检查一切是否正常。那么:对于一个非常大的网站,从 MySQL 切换到 MySQLi 的最佳方式是什么?

谢谢!

【问题讨论】:

没有简单的方法。需要检查所有脚本并替换调用。和测试。 发生了哪些主要变化?只是参数和函数的名称?不,我没有很多测试人员...... 【参考方案1】:

您的问题没有简单的答案,因为几乎所有简单的方法都涉及在编写应用程序时以不同的方式做事。

如果您在整个代码中直接调用 mysql_* 函数,并且没有通过帮助类或函数进行查询的数据库抽象层,那么您将需要编辑每个命令。

你不能只是在像mysql_query这样的命令中添加一个i,因为程序上mysqli_query()要求第一个参数是到数据库的链接,其中mysql_query()如果有连接,它是第二个参数.

我建议不要只是将 mysql_query(...) 更改为 mysqli_query($link,.....),而现在是放置数据库抽象层的最佳时机。因此,请使用实际处理您的查询的函数,例如 sql_query(),以便将来如果您需要再次更改数据库,您可以只更新一个抽象文件中的数据库特定命令。这样,如果您编写一个包装 mysqli_query 的函数,那么您可以简单地将您的 mysql_query() 重命名为您的辅助函数,并让辅助函数担心将链接放在那里。

虽然这是最简单的方法,但它不会绑定参数或准备语句,这是防止 sql 注入漏洞的主要因素

一旦你改变了所有这些你需要测试的命令。

如果您没有编写自动化测试,那么这可能是开始编写它们的好时机。即使您需要检查每项更改是否有效,但如果您通过自动化测试来完成,那么您将来可以避免这种痛苦。

【讨论】:

作为一个手头有同样任务的新手程序员,我很欣赏分解到应该做什么,但与往常一样,还有一个紧迫的截止日期,我没有时间学习:抽象层如何作品;如何完成自动化测试(对于 OOP 来说非常新)。如果您有关于该主题的良好文档,我将不胜感激,但很可能我必须立即开始替换所有 mysql_* 呼叫。提前致谢【参考方案2】:

您正在采取正确的行动,因为最新的 php 版本不推荐使用 mysql_* 函数。你应该为此下载一个转换器...... 看到这个并下载...mysql to mysqli

【讨论】:

这实际上是一个错误的举动。这样的机械更换不会增加安全性。 OP 已经有了这个链接。

以上是关于将大型网站从 MySQL 切换到 MySQLi [重复]的主要内容,如果未能解决你的问题,请参考以下文章

从 mysql 更新到 mysqli 后数据库查询中断

Mysqli - 将结果绑定到数组

从 MYSQL 更新到 MYSQLI [重复]

从 mysql 过渡到 MySQLi 或 PDO

从 MySQL 到 mysqli 的转换不起作用

如何将大型 MySQL 数据库从一台服务器迁移到另一台服务器?