面试复习

MySQL pdo预处理防止sql注入

2020-05-16  本文已影响0人  云三木

PDO执行预处理:

预处理的语法

服务器发送一条sql给mysql服务器,mysql服务器会解析这条sql。

$pdo->prepare('select * from table1 where id=:id'); 

服务器发送一条sql给mysql服务器,mysql服务器不会解析这条sql,只会把execute的参数当做纯参数赋值给上面的模板。
哪怕参数中有sql命令也不会被执行,从而实现防治sql注入。

$pdo->execute([':id'=>10]);
注意:为了让mysql服务器去拼凑sql,而不是web server去拼凑,必须在创建pdo对象的时候加个参数:

这个参数叫模拟prepare,默认是TRUE,意思是让web server代替mysql去做prepare,达到模拟prepare的作用。(web server实现模拟prepare的原理其实也就是底层用系统函数自行拼凑sql,和手动拼凑没区别,所以还是会把危险的sql拼凑进去,然后给mysql服务器执行,依然会被sql注入)

所以ATTR_EMULATE_PREPARES必须设置为FALSE。

$this->_pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
上一篇 下一篇

猜你喜欢

热点阅读