我在整个项目中都使用了mysql_query()
;但我刚刚得知自PHP {5}已被弃用,已在PHP 7中被删除。
所以,我想知道我是否可以盲目地用我的项目中的mysql_
替换所有mysql_
函数?例如,只需将mysqli_
替换为mysql_query()
即可。有不良影响吗?
答案 0 :(得分:41)
简短回答是否,功能不相同。
好消息是有一个转换器工具可以帮助你,如果你有很多电话/项目需要改变。这将允许您的脚本立即工作。
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注入。看一下How can I prevent SQL injection in PHP?,但我将在这里介绍基础知识。
现在,您必须在查询和其他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();
如果我经历过所有这些,我会永远在这里,但你明白了。有关详细信息,请查看the documentation。不要忘记转换任何连接关闭,结果释放,或错误和行计数功能。
基本的经验法则是对于使用数据库连接的函数,您需要立即将它包含在函数中(作为过程中的第一个参数,或者用于在OO中调用函数的对象),或者结果集只需将函数更改为mysqli_
或使用结果集作为对象。
答案 1 :(得分:7)
如果您无法将所有调用转换为旧项目中的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"; }
答案 2 :(得分:2)
你不能。 mysql和mysqli的一些功能需要不同的参数。所以你应该知道哪些将使用相同的参数。