Anu*_*Anu 2 php mysqli sql-injection
我读了很多文章,说使用准备好的语句非常安全,并且可以很好地防止 SQL 注入。我在不使用准备好的语句的情况下构建了一些网站。但是在阅读了所有这些文章之后,我正在考虑使用准备好的语句来更改整个代码。
我的问题
是否有必要始终使用准备好的语句?或者是否有任何情况下,正常语句就足以超过准备好的语句?
如果您有一个完全硬编码的 SQL 查询,并且在 SQL 中不需要 PHP 变量,那么非准备语句就足够了。
下面是一个例子:
$result = $mysqli->query("SELECT * FROM mytable WHERE updated_at > NOW() - INTERVAL 7 DAY");
Run Code Online (Sandbox Code Playgroud)
查询是自包含的。它只是一个固定的字符串,完全由您的应用程序控制。任何不受信任的内容都不会影响查询。
如果您的查询需要一些可变部分,则使用查询参数,如下所示:
$stmt = $mysqli->prepare("SELECT * FROM mytable WHERE updated_at > NOW() - INTERVAL ? DAY");
$stmt->bind_param("i", $number_of_days);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)
查询参数的重点是将可能不受信任的内容与 SQL 解析步骤分开。通过使用参数,直到 SQL 被解析后,绑定变量的值才会与查询组合。因此绑定参数不可能影响查询的逻辑——参数将被限制为查询中的单个标量值。
| 归档时间: |
|
| 查看次数: |
497 次 |
| 最近记录: |