将大型网站从MySQL切换到MySQLi

5

没有简单的方法。需要检查所有脚本并替换调用,然后进行测试。 - Aris
主要的变化是什么?只有参数和函数名称吗?不,我没有很多测试人员... - Jordy
2个回答

4
你的问题没有简单的答案,因为实际上每种简单的方法都涉及在编写应用程序时进行不同的操作。
如果你的代码中直接调用了mysql_*函数而没有使用数据库抽象层通过帮助类或函数进行查询,则需要编辑每个命令。
你不能只是添加一个i到像mysql_query这样的命令中,因为过程化的mysqli_query()需要第一个参数是连接到数据库的链接,而mysql_query()则需要第二个参数。
建议在更改mysql_query(...)为mysqli_query($link,.....)之前,最好先放置一个db抽象层。因此,使用函数例如sql_query()来处理您的查询,以便在将来需要再次更改数据库时,可以在一个抽象文件中更新特定于数据库的命令。这样,如果你编写一个包装mysqli_query的函数,那么你就可以简单地将mysql_query()重命名为你的帮助函数,让帮助函数负责放置链接。
虽然这是最简单的方法,但它不会绑定参数或准备语句,这是防止SQL注入漏洞的主要因素之一。
一旦你更改了所有这些命令,你需要测试。
如果你没有编写自动化测试,那么现在可能是一个很好的时间开始编写它们。即使你需要检查每个更改是否有效,如果你通过自动化测试完成,那么你就可以避免未来的痛苦。

作为一个新手程序员,我很感激这个任务的分解,但是总是有紧迫的截止日期,我没有时间去学习:抽象层是如何工作的;自动化测试是如何完成的(对OOP非常陌生)。如果您有关于这个主题的好文档,我会很感激,但最有可能的是我必须立即开始替换所有的mysql_*调用。提前致谢。 - Fernando Silva

-1

你做得很对,因为mysql_*函数在最新的PHP版本中已经被弃用。你应该下载一个转换器来解决这个问题... 点击这里并下载...mysql to mysqli


2
这实际上是一个错误的举动。这样的机械替换对安全没有任何帮助。而且 OP 已经有了那个链接。 - Your Common Sense

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接