理解数据库的PDO处理的理念
做第一份工作的时候,脑海里没有数据安全性的概念,从来没有网站被黑客盯上的事情。网站用户量也不大,虽然工作繁忙,但是只要代码上了线,基本上没有出过问题。在这个期间曾经做过一些傻的事情,认为sql写的越复杂越长越牛逼,显得越有技术水平。往往将多表的查询也写成一个sql,在sql中使用表连接、使用函数处理等。这个时候代码依然在线上跑的很欢实,没有出现过问题。后来又学习了存储过程,这个也是为了提升自己的技术能力。然而对于效率和安全性全然没有意识。没有人告诉我这样写代码是不对的,也没有人告诉我这样写代码是不高效的,和同事聊天的时候,大家发出感叹:代码的优雅其实没有什么作用,只要能够实现功能就行了。有了这个思想之后,觉得自己很牛逼,无论什么功能,不就是增删改查四把利器可以解决的嘛。
新的公司,刚开始让我受到了很多的打击,也学到了很多。比如代码的规范、比如程序的复杂性,比如代码的优雅性,开始有人看我的代码了。我也开始关注自己的代码在书写的时候是否是效率最高理解起来更简单,对于程序的规范书写有了全新的认识。新的公司用的是pdo,自己写的框架。因此写sql的时候,要按照预处理的规范去写。
这篇文章并不会去讲解具体的pdo用法,这个在网上一搜一大把,基本上看看就明白了。但是为什么要用呢,是发生了什么事情,导致我们写sql的时候要使用这个预处理呢?
1、可以加快sql的处理速度。
2、可以更加安全的执行sql。
加快sql的处理速度是PDO自己的功能,和数据库没有什么关系(如mysql,下文将用mysql代替数据库常用词)。PDO是PHP的一个扩展(extend)。本质的说PDO是用来隔离数据与逻辑的一个中间件,可以更加简便安全的处理数据。当程序接受到一个sql的时候,PDO会使用一个语法模板,将参数和模板进行分离。经过预处理之后,然后将拼接好的sql发送给mysql服务器。那么快速体现在哪里呢。当一个sql执行多次的时候,php会在内存中保存该sql的模板,这样只需要对数据进行处理就好了。使得sql的效率得以提高,安全性也得以保证。当然这样就万无一失了吗?并不是的,我们发送的参数必须经过转义,这样才能保证数据的准确性。
本文参考:http://www.cnblogs.com/leezhxing/p/5282437.html 【原理分析】
http://www.lai18.com/content/369336.html 【方法概览】
https://segmentfault.com/q/1010000000723496 【原理】