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

时间:2013-01-19 19:36:05

标签: php mysql mysqli

因此,我确信那些曾经是SO的常客注意到,mysql_函数将被弃用,建议使用mysqli_PDO代替。因此,我决定通过在我的代码中进行简单的查找/替换来转换到mysqli,用mysql_替换每个mysqli_。这似乎在Dreamweaver中工作正常,我没有语法错误或任何东西。所有新的mysqli_函数都显示为蓝色,这意味着它们被识别为有效函数。

然而,当我保存所有内容并运行代码时,我注意到任何与mysql有关的代码都无法运行。撤消替换解决了问题。

我的服务器可能不支持mysqli功能吗?我知道它正在运行php 5和mysql 5.是否还有其他东西需要添加到代码中?我错过了什么?

5 个答案:

答案 0 :(得分:4)

现在是切换的好时机,因为PHP 7.0从核心中删除了ext/mysql函数。

考虑以下遗留代码

$res = mysql_query($sql);

mysql_函数是懒惰的,因为它会使用任何打开的连接。但mysqli_不仅不是懒惰,它还是对象,而不是连接资源(mysql_connect()将返回的内容)。在这里查看connecting to the database

的这些行
$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_函数要求您传递连接object作为第一个参数。同样重要的是要注意结果也是对象(mysqli_result类),尽管它们的程序对应物只需要结果集,因此您可以简单地找到/替换它们。

为了完整,还有一个不常见的问题(这是非常古老的代码):mysql_result。此函数在mysqli_中没有等效项。您应该切换到完整行返回函数,如mysqli_fetch_assoc($result)

答案 1 :(得分:1)

你可能想看看http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers,它应该告诉你关于迁移mysql_代码的所有知识,但是要告诉你PDO,而不是MySQLi ..

答案 2 :(得分:1)

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

  1. 检查mysqli here
  2. 的安装情况
  3. 检查mysqli here
  4. 的配置
  5. 以两种方式检查数据库连接:

    ** 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);
    

    如果你检查过你之前完成的每个查询你必须特别找到第3点中的错误之一 您可以参观其教程hereherehere

答案 3 :(得分:0)

很惊讶没有人提到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

答案 4 :(得分:-1)

  

mysql_函数现已弃用

不,他们还没有

  

我决定通过在我的代码中进行简单的查找/替换来转换到mysqli

问题很可能在于mysqli函数具有反向参数顺序并且需要显式连接资源。

尽管如此,即使你成功进行批量替换,它对你的代码也没有丝毫的好处,所以,你最好保持原样,尽管有些错误。 。本网站上的过度热情运动。

  1. 没有理由赶快行动。你有至少5年的时间,直到你开始注意到一些不便。
  2. 关于mysql函数的所有这些噪音的目标不是将一些API更改为另一个API,而是为了使通常的PHP代码更加明智和安全。只需搜索和替换,您就无法实现这两个目标 - 因此,根本没有理由这样做。
  3. 你真正需要的是一种处理查询的智能方法,封装在一些库类中,这不仅可以改善运行SQL查询的体验,还可以将所有API函数移动到一个这些地方可以很容易地被替换为某些人决定强迫你使用的API。