我想知道那些准备好的PDO语句是否确实增加了安全性,或者它们是否只是查询中的“廉价”文本替换。准备好的语句实际上是,无论作为参数插入什么,DBMS都不会将其作为指令本身的一部分进行解析,因此参数如
"'; DROP TABLE foobar;"
没有效果,也不会破坏查询。有谁知道这个细节?我想用PDO和预备语句来防止sql注入。事实证明它们很难使用(甚至不能工作,至少在我的本地机器上工作),所以我想在浪费更多时间使用PDO之前找到它; - )
答案 0 :(得分:11)
创建预准备语句会将带有通配符的查询发送到服务器进行解析,并返回一个令牌来调用该语句。
呼叫仅涉及发送绑定到每个参数的数据。这意味着不会解析数据(因为它不是查询字符串的一部分),并且在解析预准备语句时修复了查询结构,并且无法通过注入进行更改。
所以,是的,准备好的声明肯定会增加安全性。
这也意味着如果为多个请求重复使用预准备语句,则不必承担解析开销。
答案 1 :(得分:3)
是的,它们可以提高安全性。与PHP中的常规MYSQL方法相比,PDO或MySQLi也提高了速度,因为数据以更紧凑的形式传递。