我在mysql_query()
整个项目中都使用过; 但我刚刚了解到mysql_
PHP 5.5已被弃用,已在PHP 7中删除.
那么,我想知道我是否可以盲目地替换我项目中的所有mysql_
功能mysqli_
?例如,只需替换mysql_query()
为mysqli_query()
.有不良影响吗?
wor*_*fjr 42
简短的回答是否定的,功能不相同.
好消息是有一个转换器工具可以帮助你,如果你有很多要改变的电话/项目.这将允许您的脚本立即工作.
https://github.com/philip/MySQLConverterTool
它是Oracle原始版本的分叉版本,它是犹太洁食.
也就是说,更新代码并不太难,而且您可能希望迁移到面向对象的方法......
1)连接
对于所有意图和目的,您需要一个新的连接函数,将连接保存为PHP变量,例如;
$mysqli = new mysqli($host,$username,$password,$database);
Run Code Online (Sandbox Code Playgroud)
注意我已经保存了连接$mysqli
.您可以保存$db
或任何您喜欢的,但您应该在整个代码中使用它来引用连接.
请记住检查连接错误;
if ($mysqli->connect_errno) echo "Error - Failed to connect to MySQL: " . $mysqli->connect_error;
Run Code Online (Sandbox Code Playgroud)
2)查询
注意:您应该使用MySQLi中提供的预准备语句来防止SQL注入.看看如何在PHP中阻止SQL注入?,但我将在这里介绍基础知识.
您现在必须在查询中包含连接作为参数,以及其他mysqli_
函数.在程序代码中它是第一个参数,在OO中你把它写成类方法;
程序:
$result = mysqli_query($mysqli,$sql);
Run Code Online (Sandbox Code Playgroud)
OO:
$result = $mysqli->query($sql);
Run Code Online (Sandbox Code Playgroud)
3)获取结果
获取结果类似于mysql_
程序中的旧函数;
while($row = mysqli_fetch_assoc($result))
Run Code Online (Sandbox Code Playgroud)
但是$result
现在是mysqli中的一个对象,你可以使用对象函数调用;
while($row = $result->fetch_assoc())
Run Code Online (Sandbox Code Playgroud)
4)关闭连接
和以前一样,你需要在close函数中包含连接; 作为程序论证;
mysqli_close($mysqli);
Run Code Online (Sandbox Code Playgroud)
以及在OO中运行函数的对象;
$mysqli->close();
Run Code Online (Sandbox Code Playgroud)
如果我经历过这些,我会永远在这里,但你明白了.查看文档以获取更多信息.不要忘记转换任何连接关闭,结果释放,或错误和行计数功能.
基本的经验法则是使用数据库连接的函数,您需要将它现在包含在函数中(作为过程中的第一个参数,或者用于在OO中调用函数的对象),或者用于结果集您可以将函数更改为mysqli_
或使用结果集作为对象.
小智 8
如果您无法将所有调用转换为旧项目上的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"; }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
41066 次 |
最近记录: |