理解数据库的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 【原理】
理解数据库的PDO处理的理念的更多相关文章
- php大力力 [050节] 兄弟连高洛峰 PHP教程 2014年[数据库、PDO教程]
php大力力 [050节] 兄弟连高洛峰 PHP教程 2014年[数据库.PDO教程] 第14章 数据库252.[2014]兄弟连高洛峰 PHP教程14.1.1 复习数据库[已发布,点击下载]253. ...
- 深入理解数据库磁盘存储(Disk Storage)
数据库管理系统将数据存储在磁盘.磁带以及其他的裸设备上,虽然这些设备的访问速度相比内存慢很多,但其非易失性和大容量的特点使他们成为数据存储的不二之选. 本文主要讨论大型数据库产品的磁盘存储内部结构,这 ...
- .NET:通过 CAS 来理解数据库乐观并发控制,顺便给出无锁的 RingBuffer。
背景 大多数企业开发人员都理解数据库乐观并发控制,不过很少有人听说过 CAS(我去年才听说这个概念),CAS 是多线程乐观并发控制策略的一种,一些无锁的支持并发的数据结构都会使用到 CAS,本文对比 ...
- mysql数据库查询pdo的用法
最早的php对mysql数据库查询是mysql和mysqli方法,后来php的新版本进一步封住了该方法,于是又pdo,抛开php框架,使用pdo查询数据,使用也是相当简便 <?php ini_s ...
- PHP数据库基于PDO操作类(mysql)
这是网上找的关于Mysql的操作类,非常适合初学者使用 <?php class Mysql { protected static $_dbh = null; //静态属性,所有数据库实例共用,避 ...
- 【眼见为实】自己动手实践理解数据库READ UNCOMMITED && SERIALIZABLE
目录 准备工作 ①准备测试表和测试数据 ②关闭数据库事务自动提交 ③设置InnoDB存储引擎隔离级别 [READ UNCOMMITTED] [READ UNCOMMITTED]能解决的问题 [READ ...
- 【眼见为实】自己动手实践理解数据库READ COMMITTED && MVCC
[READ COMMITTED] 首先设置数据库隔离级别为读已提交(READ COMMITTED): set global transaction isolation level READ COMMI ...
- 【眼见为实】自己动手实践理解数据库REPEATABLE READ && Next-Key Lock
[REPEATABLE READ] 首先设置数据库隔离级别为可重复读(REPEATABLE READ): set global transaction isolation level REPEATAB ...
- PHP数据库扩展 - PDO操作
PDO操作 PDO操作 描述:odp是php对数据库操作统一化的操作 语法:$pdo = new PDO("DB名:host=主机名;dbname=DB名","DB账号& ...
随机推荐
- [Erlang 0107] Erlang实现文本截断
抽时间处理一下之前积压的一些笔记.前段时间有网友 @稻草人 问字符串截断的问题"各位大侠 erlang截取字符串一般用哪个函数啊",有人支招用string:substr/3, ...
- MongoDB学习笔记~自己封装的Curd操作(按需更新的先决条件)
回到目录 我们上一讲中介绍了大叔封装的Mongo仓储,其中介绍了几个不错的curd操作,而对于按需更新内部子对象,它是有条件的,即你的子对象不能为null,也就是说,我们在建立主对象时,应该为子对象赋 ...
- Content-Type 之 application/json 与 text/javascript
我们一般在服务端返回 json 格式数据给浏览器端时,会使用下面的代码: response.setContentType("text/javascript;charset=UTF-8&quo ...
- openstack中的身份管理
原文:http://blog.csdn.net/xxfigo/article/details/8785748 原作者关于openstack的一系列文章http://blog.csdn.net/xxfi ...
- php使用$_SERVER["REMOTE_ADDR"]获取访问IP地址
print "您的IP地址是:"; if(!empty($_SERVER["HTTP_CLIENT_IP"])){ $cip = $_SERVER[" ...
- 【Windows编程】系列第四篇:使用Unicode编程
上一篇我们学习了Windows编程的文本及字体输出,在以上几篇的实例中也出现了一些带有“TEXT”的Windows宏定义,有朋友留言想了解一些ANSI和Unicode编程方面的内容,本章就来了解和学习 ...
- 【CSS】创建布局
随着对分离HTML元素的语义重要性与其表现的影响的不断强调,CSS在HTML5元素布局方面的作用越来越重要. 1. 定位内容 控制内容最简单的方式就是通过定位,这允许你使用浏览器改变元素的布局方式. ...
- NYOJ-858下三角矩阵
下三角矩阵 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 给定一个由0和1组成的矩阵.只允许交换相邻的两行,要把矩阵转化成下三角矩阵(主对角线上方的元素都是0),最少需 ...
- JS九大内置对象
- Jenkins学习三:介绍一些Jenkins的常用功能
Jenkins其实就是一个工具,这个工具的作用就是调用各种其他的工具来达成你的目的. 1.备份.迁移.恢复jenkins 首先找到JENKINS_HOME,因为Jenkins的所有的数据都是以文件的形 ...