繁体   English   中英

查找/替换mysql_到mysqli_使代码无效

[英]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 ..

您必须知道在更换代码时可能会遇到许多问题。

  1. 这里检查mysqli的安装。
  2. 这里查看mysqli的配置。
  3. 以两种方式检查数据库连接:

    ** 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函数具有反向参数顺序并且需要显式地连接资源。

尽管如此,即使你成功进行大量替换,它对你的代码也没有丝毫的好处 ,所以,你最好保持原样,尽管在这个网站上有一些错误的......过于激烈的竞选。

  1. 没有理由赶时间。 你有至少5年的时间,直到你开始注意到一些不便。
  2. 关于mysql函数的所有这些噪音的目标不是将一些API更改为另一个API,而是为了使通常的PHP代码更加明智和安全。 只搜索和替换你不会达到这两个目标 - 所以,根本没有理由这样做。

你真正需要的是一种处理查询的智能方法,封装在一些库类中,这不仅可以提高运行SQL查询的体验,还可以将所有API函数移动到一个可以轻松替换为任何API的地方。有些人会决定强迫你使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM