繁体   English   中英

PHP / mysql:是否正在将(SELECT,{resource})更改为({resource},SELECT),将mysql_ *转换为mysqli_ *的可行临时补丁?

[英]PHP/mysql: Is changing (SELECT, {resource}) to ({resource}, SELECT) a viable temporary patch for mysql_* to mysqli_*?

在首先检查mysql *()和mysqli *()函数系列在应用方面的差异时,在我看来

$seta = mysql_query("SELECT * FROM table WHERE field = $Filter", $database);

可以快速替换为:

$seta = mysqli_query($database, "SELECT * FROM table WHERE field = $Filter");

同样,似乎

IF ($A = mysql_fetch_array($seta)) {
    do {
    //code here
    } while ($A = mysql_fetch_array($seta));
}

可以替换为:

IF ($A = mysqli_fetch_array($seta)) {
    do {
    //code here
    } while ($A = mysqli_fetch_array($seta));
}

可以按照我期望的方式工作吗? 因为它在mysqli *()之前工作了?

请注意 :我不是问我是否应该这样做,只要我做到这一点。 我完全知道,将创可贴打在一条断腿上是没有用的……也就是说,在准备三月份的演示之前,我没有太多的编码/测试时间。

是的,我知道这是易受攻击的代码。 没有保障,我不会投产。 我也意识到我并没有以这种方式使用mysqli *()系列函数的全部功能。

我的目标是在没有这么长的时间紧缩的情况下正确地重构所有内容(是的,我知道,程序员的最后一句话很著名)。 我只需要运行修补程序的代码即可运行Demo,然后可以将其停用。

我寄希望于有了一个可以运行的原型,无论是在现场还是在服务器上,我都在不断旋转,以证明对软件更新的需求。我将能够将PHP v4.x抛在脑后。

项目:
PHP / MySQL更好的用户搜索

还检查了:
如何从mysql *升级到mysqli *?
PHP从mysql *迁移到mysqli
上面的标题被删去了下划线以防止格式化

快速且肮脏的方法(着重于dirty )是通过将mysql_query转换为mysqli_query等来实现的。 问题是mysql_query使用起来确实很笨拙,因此保留编码风格不会帮助清理任何内容。

尽管我强烈建议切换到PDO,但它是一个更灵活,功能更强大的数据库层,如果您要使用mysqlibind_param使用参数化查询bind_param将用户数据添加到查询中。 这解决了绝大多数SQL注入错误 我还建议您使用面向对象的界面,这样您的更新代码就显而易见了。 单身i的区别很容易被忽略,而且它的冗长程度通常较低。

换句话说,您替换的代码如下所示:

$stmt = $database->prepare("SELECT * FROM table WHERE field=?");
$stmt->bind_param('s', $filter);
$res = $stmt->execute();

如果您受此约束,则应该捕获所有SQL错误。

由于命名参数的缘故,PDO更好:

$stmt = $database->prepare("SELECT * FROM table WHERE field=:filter");
$res = $stmt->execute(array('filter' => $filter));

从长远来看,这通常意味着更少的代码。

暂无
暂无

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

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