[英]Find/replace mysql_ to mysqli_ makes code nonfunctional
因此,我确信任何曾经是SO的常规人员已经注意到, mysql_
函数将被弃用,并建议使用mysqli_
或PDO
代替。 因此,我决定通过在我的代码中进行简单的查找/替换来转换到mysqli,用mysql_
替换每个mysqli_
。 这似乎在Dreamweaver中工作正常,我没有语法错误或任何东西。 所有新的mysqli_
函数都是蓝色的,这意味着它们被识别为有效函数。
但是,当我保存所有内容并运行代码时,我注意到任何与mysql有关的代码都无法运行。 撤消替换解决了问题。
我的服务器可能不支持mysqli功能吗? 我知道它正在运行php 5和mysql 5.是否还有其他东西需要添加到代码中? 我错过了什么?
这是现在切换的好时机,因为PHP 7.0从核心删除了ext/mysql
函数。
请考虑以下遗留代码
$res = mysql_query($sql);
mysql_
函数是懒惰的,因为它会使用任何打开的连接。 但mysqli_
不仅不是懒惰,它是一个对象 ,而不是连接资源(这是mysql_connect()
将返回的)。 在这里查看这些行以连接到数据库
$mysqli = new mysqli('host', 'username', 'password', 'db');
$mysqli = mysqli_connect('host', 'username', 'password', 'db');
他们俩都给你同样的东西......
返回表示与MySQL服务器的连接的对象 。
恩,那就对了。 甚至程序连接函数也返回一个对象。 最简单的使用方法是直接使用对象形式
$mysqli->query($sql);
程序功能只是包装器。 但他们并不懒惰。 看看差异
mysqli_query($mysqli, $sql);
这个中最大的问题(为什么mysql_
的简单查找和替换与mysqli_
失败)是大多数mysqli_
函数都要求你将连接对象作为第一个参数传递 。 同样重要的是要注意结果也是对象( mysqli_result类),尽管它们的过程对应物只需要结果集,因此您可以简单地查找/替换它们。
只是为了完成,还有一个不常见的问题(这是非常古老的代码): mysql_result 。 这个函数在mysqli_
没有等价物。 你应该切换到整行返回函数,如mysqli_fetch_assoc($result)
你可能想看看http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers ,它应该告诉你关于迁移mysql_代码的所有知识,但是要告诉你PDO,而不是MySQLi ..
您必须知道在更换代码时可能会遇到许多问题。
以两种方式检查数据库连接:
** natimysql之类的简单连接:
$con = mysqli_connect("localhost","my_user","my_password","my_db");
但是现在你必须这样使用它
mysqli_query($con,"SELECT * FROM Table"); // $con is the connection which is must for executing the sql query
**我最好的方法是将它作为新的mysqli对象处理:
$con = new mysqli('localhost', 'user', 'pass', 'demo');
现在你会这样做:
$sql = "SELECT * FROM Table"; $con->query($sql);
很惊讶没人提到mysql_和mysqli_函数不是完全相似的,因此搜索和替换必然会失败。 此外,mysqli_通常会坚持使用数据库连接参数(当在程序模式中使用时,这是你的目标),其中mysql_只会抓取代码中先前打开的任何连接。
如果启用了调试,则应该能够解决错误。
最常见的“问题”是没有mysqli等效的mysql_result(),人们在获得单个结果时经常会使用它。 我愿意打赌你的代码散布着“mysqli_result()”调用,这些都会失败。
这是基本的解决方案。 “好”修复可能是为所有SQL调用使用专用类,因此在整个代码库中只有少数使用mysqli函数,并且所有函数都在一个文件中。 这样,当你重构时,你不需要搜索大量文件,所有文件都具有各种mysqli函数的各种不同用法。
如果您“需要MySQL的一些权威来源 - > MySQLi迁移”我可以推荐一个名为Google的网站;-)输入“MySQL - > MySQLi迁移”。
例如,这个“for Dummies”页面显示了您需要解决的各种功能之间的差异,以使您的代码正常工作。
http://www.dummies.com/how-to/content/how-to-convert-mysqli-functions-to-mysql-functions.html
mysql_函数现已弃用
不,他们还没有
我决定通过在我的代码中进行简单的查找/替换来转换到mysqli
问题很可能在于mysqli函数具有反向参数顺序并且需要显式地连接资源。
尽管如此,即使你成功进行大量替换,它对你的代码也没有丝毫的好处 ,所以,你最好保持原样,尽管在这个网站上有一些错误的......过于激烈的竞选。
你真正需要的是一种处理查询的智能方法,封装在一些库类中,这不仅可以提高运行SQL查询的体验,还可以将所有API函数移动到一个可以轻松替换为任何API的地方。有些人会决定强迫你使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.