为什么预处理和参数化查询可以防止sql注入呢?

在传统的写法中,sql查询语句在程序中拼接,防注入(加斜杠)是在php中处理的,然后就发语句发送到mysql中,mysql其实没有太好的办法对传进来的语句判断哪些是正常的,哪些是恶意的,所以直接查询的方法都有被注入的风险。
在mysql5.1后,提供了类似于jdbc的预处理-参数化查询。它的查询方法是:

1.先预发送一个sql模板过去
2.再向mysql发送需要查询的参数


就好像填空题一样,不管参数怎么注入,mysql都能知道这是变量,不会做语义解析,起到防注入的效果,这是在mysql中完成的。

参考:https://segmentfault.com/a/1190000008117968 (php操作mysql防止sql注入(合集))