很好地宣传,准备好的语句可以很好地防御SQL注入攻击。
有人可以解释绑定过程中会发生什么事情。
我的主要困惑源于一个声明使用占位符并且这些占位符被变量替换的事实。因此,如果变量包含恶意sql,那么它们仍将被绑定以代替占位符吗?
答案 0 :(得分:1)
不,绑定过程确保绑定值与进入数据库的值匹配为1:1。
所以,'xxx; DROP TABLE yyy;'作为值将是varchar字段中的实际值。不使用参数绑定时,将执行此代码。
答案 1 :(得分:1)
首先,PDO清理数据库引擎所看到的常量,例如:INSERT子句上的值,WHERE子句上的比较值等,但它不会清理标识符或关键字或其他内容。 (旁注:它不会消毒动态SQL,因此如果使用动态SQL,则不能仅依赖PDO)
关于你要问的问题,你应该注意,在任何参数绑定上,你提供了你想要的那种绑定:字符串或数字或布尔(或其他,我不记得了)。所以他的事实是: