做第一份工作的时候,脑海里没有数据安全性的概念,从来没有网站被黑客盯上的事情。网站用户量也不大,虽然工作繁忙,但是只要代码上了线,基本上没有出过问题。在这个期间曾经做过一些傻的事情,认为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  【原理】

理解数据库的PDO处理的理念的更多相关文章

  1. php大力力 [050节] 兄弟连高洛峰 PHP教程 2014年[数据库、PDO教程]

    php大力力 [050节] 兄弟连高洛峰 PHP教程 2014年[数据库.PDO教程] 第14章 数据库252.[2014]兄弟连高洛峰 PHP教程14.1.1 复习数据库[已发布,点击下载]253. ...

  2. 深入理解数据库磁盘存储(Disk Storage)

    数据库管理系统将数据存储在磁盘.磁带以及其他的裸设备上,虽然这些设备的访问速度相比内存慢很多,但其非易失性和大容量的特点使他们成为数据存储的不二之选. 本文主要讨论大型数据库产品的磁盘存储内部结构,这 ...

  3. .NET:通过 CAS 来理解数据库乐观并发控制,顺便给出无锁的 RingBuffer。

    背景 大多数企业开发人员都理解数据库乐观并发控制,不过很少有人听说过 CAS(我去年才听说这个概念),CAS 是多线程乐观并发控制策略的一种,一些无锁的支持并发的数据结构都会使用到 CAS,本文对比 ...

  4. mysql数据库查询pdo的用法

    最早的php对mysql数据库查询是mysql和mysqli方法,后来php的新版本进一步封住了该方法,于是又pdo,抛开php框架,使用pdo查询数据,使用也是相当简便 <?php ini_s ...

  5. PHP数据库基于PDO操作类(mysql)

    这是网上找的关于Mysql的操作类,非常适合初学者使用 <?php class Mysql { protected static $_dbh = null; //静态属性,所有数据库实例共用,避 ...

  6. 【眼见为实】自己动手实践理解数据库READ UNCOMMITED && SERIALIZABLE

    目录 准备工作 ①准备测试表和测试数据 ②关闭数据库事务自动提交 ③设置InnoDB存储引擎隔离级别 [READ UNCOMMITTED] [READ UNCOMMITTED]能解决的问题 [READ ...

  7. 【眼见为实】自己动手实践理解数据库READ COMMITTED && MVCC

    [READ COMMITTED] 首先设置数据库隔离级别为读已提交(READ COMMITTED): set global transaction isolation level READ COMMI ...

  8. 【眼见为实】自己动手实践理解数据库REPEATABLE READ && Next-Key Lock

    [REPEATABLE READ] 首先设置数据库隔离级别为可重复读(REPEATABLE READ): set global transaction isolation level REPEATAB ...

  9. PHP数据库扩展 - PDO操作

    PDO操作 PDO操作 描述:odp是php对数据库操作统一化的操作 语法:$pdo = new PDO("DB名:host=主机名;dbname=DB名","DB账号& ...

随机推荐

  1. Ignite安装配置——上篇

    Ignite介绍 Ignite 是SolarWinds公司开发的一款数据库性能监控.性能分析并提供优化解决方案的性能检测分析工具,Ignite配置简单.方便:它会收集实时会话数据.服务器资源使用情况, ...

  2. Solr部分更新MultiValued的Date日期字段时报错及解决方案

    问题描述如标题. 异常信息如下: Result Caused by: org.apache.solr.common.SolrException: Invalid Date String:'Mon Se ...

  3. Window下python2.7+Apache+mod_wsgi+Django服务器配置

    前言:试着使用python搭建一个网页,分别在windows下和linux下,本篇文章主要讲解Window下python+Apache+mod_wsgi+Django服务器配置过程中遇见的问题和解决方 ...

  4. 【WPF高级】Cue or Hint or Watermark or Placehoder in Controls(为控件添加提示,水印,占位符)

      通过Style实现对Texbox添加水印 <Style x:Key="placeHolder" TargetType="{x:Type TextBox}&quo ...

  5. H5框架之Bootstrap(一)

    H5框架之Bootstrap(一) 接下来的时间里,我将和大家一起对当前非常流行的前端框架Bootstrap进行速度的学习,以案例的形式.对刚开始想学习Bootstrap的同学而找不着边的就很有帮助了 ...

  6. button

  7. FineUI小技巧(6)自定义页面回发

    前言 FineUI中的绝大部分回发事件都是由控件触发了,比如按钮的点击事件,下拉列表的改变事件,表格的排序分页事件.但有时我们可能会要自己触发页面回发,这时就要知道怎么使用 JavaScript 来做 ...

  8. JS系列——Linq to js使用小结

    前言:前面几篇介绍了下C#基础技术中的几个:反射.特性.泛型.序列化.扩展方法.Linq to Xml等,本来还有两三个知识点没有写完,比如委托.多线程.异步等,后面会陆续将它们补起来,以便作为一套完 ...

  9. C#进阶系列——MEF实现设计上的“松耦合”(四):构造函数注入

    前言:今天十一长假的第一天,本因出去走走,奈何博主最大的乐趣是假期坐在电脑前看各处堵车,顺便写写博客,有点收获也是好的.关于MEF的知识,之前已经分享过三篇,为什么有今天这篇?是因为昨天分享领域服务的 ...

  10. 谈谈我的windows服务器运维管理

    我们开发的页游General War(http://gw.gamebox.com)上线运营也有半年多了,服务器的开发到运维基本都由我一手包办,在服务器上线之后我们又招了一个程序员接手后续功能的开发,而 ...