在PDO中准备好的语句真的能提高安全性吗?

ope*_*rog 2 php security pdo

我想知道那些准备好的PDO语句是否确实增加了安全性,或者它们是否只是查询中的"廉价"文本替换.准备好的语句实际上是,无论作为参数插入什么,DBMS都不会将其作为指令本身的一部分进行解析,因此像

"'; DROP TABLE foobar;"
Run Code Online (Sandbox Code Playgroud)

没有效果,也不会破坏查询.有谁知道这个细节?我想用PDO和预备语句来防止sql注入.事实证明它们很难使用(甚至不能工作,至少在我的本地机器上工作),所以我想在浪费更多时间与PDO之前找到它;-)

Vic*_*let 11

创建预准备语句会将带有通配符的查询发送到服务器进行解析,并返回一个令牌来调用该语句.

呼叫仅涉及发送绑定到每个参数的数据.这意味着不会解析数据(因为它不是查询字符串的一部分),并且在解析预准备语句时不会通过注入更改查询的结构.

所以,是的,准备好的声明肯定会增加安全性.

它还意味着如果为多个请求重用已准备好的语句,则不必承担解析开销.