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

    问自己:为什么要进行系统清洗 1.C盘已经接近爆满,vs2015无法安装. 2.C盘以前的残留软件.文件不知道如何化解,原vs2010卸载困难. 3.整个系统反应迟缓. 改进方案: 1系统C盘 2软件 ...

  2. 从AdventureWorks学习数据库建模——实体分析

    最近打算写写数据库建模的文章,所以打算分析微软官方提供的SQL Server示例数据库AdventureWorks,看看这个数据库中有哪些值得学习的地方. 首先我们需要下载安装一个SQL Server ...

  3. redis 源码阅读 内部数据结构--字符串

    redis的内部数据结构主要有:字符串,双端链表,字典,跳跃表. 这里主要记录redise字符串的设计.相关的源码位于:src/sds.h 和 src/sds.c.   一 字符串 sds的结构体 s ...

  4. JSCH通过密钥文件进行远程访问

    需求:WEB app 需要使用JSCH来通过密钥文件的方式进行SFTP/SSH访问远程LINUX机器 实现方式:假设远程机器都含有用户名为hadoop的用户,因为密码因为策略的要求密码会随时间发生变化 ...

  5. spark standalone ha spark submit

    when you build a spark standalone ha cluster, when you submit your app,  you should send it to the l ...

  6. EF6 DataMigration 从入门到进阶

    引言 在EntityFramework的开发过程中我们有时因需求变化或者数据结构设计的变化经常会改动表结构.但数据库Schema发生变化时EF会要求我们做DataMigration 和UpdateDa ...

  7. 《InsideUE4》GamePlay架构(十)总结

    世界那么大,我想去看看 引言 通过对前九篇的介绍,至此我们已经了解了UE里的游戏世界组织方式和游戏业务逻辑的控制.行百里者半九十,前述的篇章里我们的目光往往专注在于特定一个类或者对象,一方面固然可以让 ...

  8. BZOJ1026: [SCOI2009]windy数[数位DP]

    1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 6346  Solved: 2831[Submit][Sta ...

  9. java操作Redis

    需要使用如下jar包 <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency> ...

  10. 操作系统IO模型

    操作系统IO模型 声明:如下内容是根据APUE和mycat两本著作中关于I/O模式的一些内容加上自己的一些理解整理而成,仅供学习使用. 本节内容 UNIX下可用的五种I/O模型 三种I/O模型 Rea ...