SQL 以字符串形式查询 - 不会被注入?

SQL Query as a string - safe from injection?

大部分时间我都是这样SQL的:

$pdo = new PDO($dsn, $usr, $pass);

$qry = 'SELECT * FROM `my_table` WHERE `pk_id` = '. $id .';';
$res = $pdo->query($qry);

但最近我看到一些帖子表明,唯一安全的方法是使用准备好的语句——这对我来说不是真正的问题,这可能有答案,只是我不能通过谷歌搜索找到。

当然,如果我的所有语句都以 .';' 结尾,使用 concat 可以吗?

谢谢,

没有。

在 SQL 中,如果您在查询末尾提供两个分号,它不会给出错误。

所以如果用户可以传递这个:

1; DROP TABLE users;

无论在代码末尾添加或不添加分号,它都会产生相同的结果。

准备好的语句的巨大好处是不会更改任何数据。它只是简单地发送两个查询。

Here 是一个很好的来源,其中包含很多 SQL 注入示例。