gpt4 book ai didi

php - 我可以盲目地将所有mysql_函数替换为mysqli_吗?

转载 作者:行者123 更新时间:2023-11-29 15:44:21 25 4
gpt4 key购买 nike

我在整个项目中使用了mysql_query();但我刚刚了解到 mysql_ 从 PHP 5.5 开始已被弃用,已在 PHP 7 中删除。

所以,我想知道是否可以在我的项目中盲目地将所有mysql_函数替换为mysqli_?例如,只需将 mysql_query() 替换为 mysqli_query()。有什么不良影响吗?

最佳答案

简短的回答是,功能并不相同。

好消息是,如果您有大量调用/项目需要更改,有一个转换器工具可以为您提供帮助。这将使您的脚本立即运行。

https://github.com/philip/MySQLConverterTool

它是 Oracle 原始版本的 fork 版本,而且是正宗的。

也就是说,更新代码并不太困难,而且您可能想迁移到面向对象的方法......

1) 连接

出于所有意图和目的,您需要一个新的连接函数,例如将连接保存为 PHP 变量;

$mysqli = new mysqli($host, $username, $password, $database);

请注意,我已保存与 $mysqli 的连接。您可以保存到 $db 或您喜欢的任何内容,但您应该在整个代码中使用它来引用连接。

记得在打开连接之前启用mysqli的错误报告;

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

2) 查询

注意:您应该使用 MySQLi 中提供的预准备语句来防止 SQL 注入(inject)。看看How can I prevent SQL injection in PHP? ,但我只是在这里介绍基础知识。

您现在必须将连接作为参数包含在查询和其他 mysqli_ 函数中。在过程代码中它是第一个参数,在面向对象中你可以像类方法一样编写它。

程序:

$result = mysqli_query($mysqli, $sql);

面向对象:

$result = $mysqli->query($sql);

3) 获取结果

结果的获取与程序中旧的mysql_函数类似;

while ($row = mysqli_fetch_assoc($result))

但是由于$result现在是mysqli中的一个对象,您可以使用对象函数调用;

while ($row = $result->fetch_assoc())

4) 关闭连接

所以和以前一样,您需要将连接包含在 close 函数中;作为程序中的参数;

mysqli_close($mysqli);

作为在 OO 中运行函数的对象;

$mysqli->close();

如果我经历了所有这些,我会永远在这里,但你明白了。看看the documentation了解更多信息。不要忘记转换您拥有的任何连接关闭、结果发布或错误和行计数函数。

基本的经验法则是,对于使用数据库连接的函数,您现在需要将其包含在函数中(作为过程中的第一个参数,或者用于在 OO 中调用函数的对象),或者一个结果集,您只需将函数更改为 mysqli_ 或使用结果集作为对象即可。

关于php - 我可以盲目地将所有mysql_函数替换为mysqli_吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57234573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com