gpt4 book ai didi

PHP/mysql : Is changing (SELECT, {resource}) 到 ({resource}, SELECT) mysql_* 到 mysqli_* 的可行临时补丁?

转载 作者:行者123 更新时间:2023-11-29 07:05:52 25 4
gpt4 key购买 nike

第一次检查 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*() 系列函数的所有功能。

我的目标是在没有如此严重的时间紧迫的情况下正确重构所有内容(是的,我知道,著名的程序员最后一句话)。我只需要修补代码来运行演示,然后我就可以停用它。

我对工作原型(prototype)抱有很高的期望——无论是在现场还是在服务器上,我只是为了证明软件更新的需要而进行旋转——我将能够把 PHP v4.x 的忧郁抛在脑后.

项目:
PHP/MySQL better user searching

还检查了:
How to upgrade from mysql* to mysqli*?
PHP Migrating from mysql* to mysqli
上面的标题被删除了下划线以防止格式化

最佳答案

快速而肮脏的方法,重点是肮脏,就是通过将mysql_query转换为mysqli_query等来做到这一点。问题是 mysql_query 使用起来确实很笨拙,因此保留这种编码风格无助于清理任何内容。

虽然我强烈建议切换到 PDO,但它是一个更灵活、功能更强大的数据库层,如果您想要 mysqli,那么您要做的就是使用 parameterized queriesbind_param将用户数据添加到您的查询中。这解决了绝大多数SQL injection bugs出大门。我还建议使用面向对象的接口(interface),以便更新的代码显而易见。单个 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));

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

关于PHP/mysql : Is changing (SELECT, {resource}) 到 ({resource}, SELECT) mysql_* 到 mysqli_* 的可行临时补丁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41704380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com