为了账号安全,请及时绑定邮箱和手机立即绑定

我可以用mysqli_一味地替换所有mysql_函数吗?

/ 猿问

我可以用mysqli_一味地替换所有mysql_函数吗?

万千封印 2019-11-18 13:49:38

我在mysql_query()整个项目中都用过;但是我刚刚了解到,mysql_PHP 5.5起已弃用该功能,而PHP 7中已将其删除。

因此,我想知道是否可以盲目替换项目中的所有mysql_功能mysqli_吗?例如,仅替换mysql_query()mysqli_query()。有副作用吗?


查看完整描述

3 回答

?
蛊毒传说

简短的回答是no,功能不相等。


好消息是,有一个转换工具可以在您需要更改许多调用/项目时为您提供帮助。这将使您的脚本立即可用。


https://github.com/philip/MySQLConverterTool


它是Oracle原始版本的分叉版本,并且是犹太洁食。


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


1)连接


为了所有目的和目的,您需要一个新的连接函数,例如,将连接另存为PHP变量;


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

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


不过请记住要检查连接错误;


if ($mysqli->connect_errno) echo "Error - Failed to connect to MySQL: " . $mysqli->connect_error;

2)查询


注意:您应该使用MySQLi中可用的预备语句来防止SQL注入。看一看如何防止PHP中的SQL注入?,但我只是在这里介绍基础知识。


现在,您必须在查询和其他mysqli_函数中包括该连接作为参数。在过程代码中,它是第一个参数,在OO中,它像类方法一样编写;


程序:


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

OO:


$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();

如果我全部经历了这些,我将永远在这里,但是您明白了。请查看文档以获取更多信息。不要忘记转换任何连接关闭,结果释放或错误和行计数功能。


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


查看完整回答
反对 回复 2019-11-18
?
ibeautiful

如果无法在旧项目上将所有调用都转换为mysqli函数,则可以安装并包括库php7-mysql-shim。


它将尝试使用mysqli在PHP 7上创建mysql的透明替换。显然,性能较慢,但这是解决此问题的解决方案,只需几分钟。您可以安全地将库包含在使用PHP 5.6的项目中(它将被忽略)。


if (defined('PHP_VERSION_ID') && (PHP_VERSION_ID >= 50600)) { require_once "mysql-shim.php"; }


查看完整回答
反对 回复 2019-11-18
?
动漫人物

你不能 mysql和mysqli的某些功能需要不同的参数。因此,您应该知道哪个将使用相同的参数。


查看完整回答
反对 回复 2019-11-18
  • 3 回答
  • 0 关注
  • 69 浏览
我要回答
慕课专栏
更多

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信