Php 查找/替换mysql到mysqli会使代码失去功能

Php 查找/替换mysql到mysqli会使代码失去功能,php,mysql,mysqli,Php,Mysql,Mysqli,因此,我相信任何经常使用So的人都会注意到,mysql\uuuz函数将被弃用,建议使用mysqli\uz或PDO。因此,我决定通过在我的代码中执行一个简单的查找/替换,将每个mysql\uu替换为mysqli\u来转换到mysqli。这在Dreamweaver中似乎可以正常工作,我没有发现语法错误或任何东西。所有新的mysqli\uu函数都是蓝色的,这意味着它们被识别为有效函数 然而,当我保存所有内容并运行代码时,我注意到任何与mysql相关的代码都变得不起作用。撤消替换解决了问题 我的服务器可

因此,我相信任何经常使用So的人都会注意到,
mysql\uuuz
函数将被弃用,建议使用
mysqli\uz
PDO
。因此,我决定通过在我的代码中执行一个简单的查找/替换,将每个
mysql\uu
替换为
mysqli\u
来转换到mysqli。这在Dreamweaver中似乎可以正常工作,我没有发现语法错误或任何东西。所有新的
mysqli\uu
函数都是蓝色的,这意味着它们被识别为有效函数

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

我的服务器可能不支持mysqli功能吗?我知道它运行的是PHP5和mysql 5。您是否需要在代码中添加其他内容?我错过了什么

mysql_uu函数现在已被弃用

不,还没有

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

问题很可能在于mysqli函数的参数顺序相反,并且显式地需要连接资源

然而,即使您成功地进行了这样的批量替换,也不会对您的代码有任何好处,因此,您最好保持原样,尽管有一些错误。。。在这个网站上进行过度热情的活动

  • 没有理由匆忙。你至少有5年的时间,直到你开始注意到一些不便
  • 所有这些关于mysql函数的噪音的目的不是为了将一些API更改为另一个API,而是为了使普通PHP代码稍微更合理和安全。仅仅通过搜索和替换是无法实现这两个目标的——因此,根本没有理由这么做

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

    现在是切换的好时机,因为PHP7.0从core中删除了
    ext/mysql
    函数

    考虑以下遗留代码

    $res = mysql_query($sql);
    
    mysql的函数是惰性的,因为它会使用任何打开的连接。但是
    mysqli\u
    不仅不懒惰,它是一个对象,而不是一个连接资源(这是
    mysql\u connect()
    将返回的)。请看这里的这些线

    他们都给你一样的东西

    返回一个对象,该对象表示与MySQL服务器的连接

    是的,没错。甚至过程连接函数也会返回一个对象。最简单的方法是直接以对象形式使用它

    $mysqli->query($sql);
    
    过程函数只是用于此目的的包装。但他们并不懒惰。看看区别

    mysqli_query($mysqli, $sql);
    
    这其中最大的一个问题(为什么用
    mysqli\uquot>简单地查找并替换
    mysqli\uquot>失败)是大多数
    mysqli\uquot>函数需要将连接对象作为第一个参数传递。同样重要的是要注意,结果也是对象(类),尽管它们的过程对应项只需要结果集,因此您可以简单地查找/替换它们


    完整地说,还有一个不太常见的问题(这是非常古老的代码):。此函数在mysqli中没有等效函数。您应该切换到整行返回函数,如
    mysqli\u fetch\u assoc($result)

    您可能想签出,这应该告诉您关于迁移mysql\u代码的所有需要知道的,但要迁移到PDO,而不是mysqli

    令人惊讶的是,没有人提到mysql_uu和mysqli_u函数不是完全相同的,因此搜索和替换肯定会失败。此外,mysqli_uu通常会坚持使用数据库连接参数(在过程模式中使用时,这是您的目标),其中mysql_uu只会获取代码前面打开的任何连接

    如果启用了调试,则应该能够处理错误

    最常见的“gotcha”是没有与mysql_result()等价的mysqli,人们在获取单个结果时经常使用它。我敢打赌,您的代码中散布着“mysqli_result()”调用,这些调用都会失败

    这是最基本的解决办法。“好的”修复方法可能是为所有SQL调用使用一个专用类,这样在整个代码库中,mysqli函数的使用就很少了,而且都在一个文件中。这样,当您重构时,您就不需要搜索堆积如山的文件,所有这些文件都具有各种mysqli函数的不同用途

    如果您“需要MySQL->MySQLi迁移的权威资源”,我可以推荐一个名为Google的网站;-)输入“MySQL->MySQLi迁移”

    例如,这个“For Dummies”页面显示了使代码正常工作所需的各种函数之间的差异


    您必须知道,在替换代码时,可能会出现许多问题。

  • 检查mysqli的安装情况
  • 检查mysqli的配置
  • 以两种方式检查DB连接:

    **简单连接,如MySQL:

    $con=mysqli_connect(“本地主机”、“我的用户”、“我的密码”、“我的数据库”)

    但现在你必须这样使用它

    mysqli_查询($con,“从表中选择*);//$con是执行sql查询所必须的连接

    **我最好的方法是将其作为新的mysqli对象处理,如下所示:

    $con=newmysqli('localhost','user','pass','d
    
    mysqli_query($mysqli, $sql);
    
    $sql = "SELECT * FROM Table";
    $con->query($sql);