做第一份工作的时候,脑海里没有数据安全性的概念,从来没有网站被黑客盯上的事情。网站用户量也不大,虽然工作繁忙,但是只要代码上了线,基本上没有出过问题。在这个期间曾经做过一些傻的事情,认为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. Linux SendMail发送邮件失败诊断案例(二)

    Linux上Sendmail经常由于一些配置问题,导致邮件发送失败,下面整理.收集了一些邮件发送失败.异常的案例. 案例1:在新服务器上测试sendmail发送邮件时,发现邮件发送不成功,检查/var ...

  2. SQL Server 2008 R2——使用FOR XML PATH实现多条信息按指定格式在一行显示

    =================================版权声明================================= 版权声明:原创文章 谢绝转载  请通过右侧公告中的“联系邮 ...

  3. HTML5 data-* 自定义属性

    在jQuery的attr与prop提 到过在IE9之前版本中如果使用property不当会造成内存泄露问题,而且关于Attribute和Property的区别也让人十分头痛,在 HTML5中添加了da ...

  4. iptables详解

    Netfilter包含有三种表,三种表下共包含有五种链,链下面包含各种规则.即表包含若干链,链包含若干规则.  (一)三种表为:filter   nat  mangle 1.filter:处理与本机有 ...

  5. Linux Shell编程入门

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...

  6. 一次ie8模式下click无反应的小事

    想起了小学时候数不尽的一件小事,哎,那夕阳下的奔跑,是我逝去的青春啊. 言归正传,先上图: <select id="cardNoList" size="4" ...

  7. 电脑缺少**.dll文件

    今天一时手残他么的删了好几个Microsoft Visual C++,导致腾讯的软件都不能用,搞了半天最后在360我的专家里看到相同问题,后来照做,就给下载好啦,哈哈哈哈哈哈哈哈,360大神 

  8. oracle 密码有效期

    oracle的密码是存在有效期的,有时候会遇到密码到期需要重设的情况,查看当前密码有效期的语句: SELECT * FROM dba_profiles s WHERE s.profile='DEFAU ...

  9. python基础之dict、set及字符

    python基础之dict.set及字符串处理 本节内容 字典介绍及内置方法 集合介绍 字符串处理 1.字典介绍及内置方法 字典是python中唯一的映射类型,采用键值对(key-value)的形式存 ...

  10. CRC校验码原理、实例、手动计算

    目录一.CRC16实现代码二.CRC32编码字符表三.CRC校验码的手动计算示例四.CRC校验原理五.CRC的生成多项式参考 一.CRC16实现代码 思路:取一个字符(8bit),逐位检查该字符,如果 ...