预处理

PDO支持sql预处理功能,可以有效的防止sql注入的问题

例如:

以下操作会导致数据表中所有数据删除

  1. $host = 'localhost';
  2. $port = 3306;
  3. $dbname = 'pdo';
  4. $user = 'root';
  5. $pass = '123';
  6. $dsn = "mysql:host={$host};port={$port};dbname={$dbname}";
  7. try {
  8. $mysql = new PDO($dsn,$user,$pass);
  9. } catch (Exception $e) {
  10. echo 'connect failure !';
  11. die();
  12. }
  13.  
  14. $id = '1 or 1=1'; //ID模拟从前端获取的删除数据的ID
  15. $sql = "DELETE FROM `books` WHERE id={$id}";
  16. $mysql->exec($sql);

这是常见的一种sql注入的方式

采用pdo提供的预处理的方法,可以避免这一点

  1. $id = '1 or 1=1'; //ID模拟从前端获取的删除数据的ID
  2. $sql = "DELETE FROM `books` WHERE id = :id"; //使用占位符代替用户输入的id
  3. $sth = $mysql->prepare($sql); //绑定参数
  4. $sth->execute(array('id'=>$id));

语法:

  1. $mysql->prepare($sql); //生成预处理语句 返回PDOStatement对象
  2. $sth->execute(array(参数)) //执行预处理语句 返回布尔值

查询

  1. $sql = 'SELECT * FROM `books` WHERE id < 100';
  2. $res = $mysql->query($sql); //执行查询 返回PDOStatement对象
  3. $all = $res->fetchAll(); //返回结果集中所有的行
  4. $row = $res->fetch(); //返回结果集中下一行,同时指针向前移动一位
  5. foreach ($all as $key => $value) {
  6. var_dump($value);
  7. }

扩展:TP中预查询

  1. $resultSet = Db::query('insert into user values(:name,:age,:sex)', ['张三','10','1']);

事务机制

  1. $mysql->beginTransaction(); //开启事务机制
  2. $sql = "UPDATE `books` SET name='mysql and PHP...' WHERE id < 100 ";
  3. $mysql->exec($sql);
  4. //根据业务执行以下语句
  5. $mysql->rollBack(); //回滚
  6. $mysql->commit(); //提交

Mysql 预查询处理 事务机制的更多相关文章

  1. php+mysql预查询prepare 与普通查询的性能对比

    prepare可以解决大访问量的网站给数据库服务器所带来的负载和开销,本文章通过实例向大家介绍预查询prepare与普通查询的性能对比,需要的朋友可以参考一下. 实例代码如下: <?php cl ...

  2. MySQL高级查询 & 事务机制

    1.基础查询where 高级条件查询Where子句 SELECT empno,ename,sal,hiredate FROM t_tmp WHERE deptno=10 AND (sal+IFNULL ...

  3. MySQL 事务机制

    事务处理是保证数据安全的重要机制,事务有四个重要属性 ,根据它们的英文名称可以记为ACID: 原子性(Atomic): 事务操作是不可分割的; 事务只存在已执行和未执行两种状态,不存在只执行了部分指令 ...

  4. MySQL的ALTER变更、正则查询、分组查询、排序查询以及事务查询的概

    MySQL的表和字段信息的变更 ALTER TABLE table-name DROP column-name; #删除某个字段 ALTER TABLE table-name ADD column-n ...

  5. MySQL的事务机制和锁(InnoDB引擎、MVCC多版本并发控制技术)

    一.事务(数据库的事务都通用的定义) 1.1 事务定义 事务是由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行.事务通常以 BEGIN TRANSACTION 开始 ...

  6. MySQL多表查询、事务、DCL:内含mysql如果忘记密码解决方案

    MySQL多表查询.事务.DCL 多表查询 * 查询语法: select 列名列表 from 表名列表 where.... * 准备sql # 创建部门表 CREATE TABLE dept( id ...

  7. MySQL:事务机制

    为什么需要事务处理? 在执行SQL语句的时候,某些业务要求,一系列操作必须全部执行,而不能仅执行一部分. MySQL5.0后引入了事务机制,MySQL支持几种基本的数据库引擎,并非所有引擎都支持事务处 ...

  8. MySql多表查询_事务_DCL(资料三)

    今日内容 1. 多表查询 2. 事务 3. DCL 多表查询: * 查询语法: select 列名列表 from 表名列表 where.... * 准备sql # 创建部门表 CREATE TABLE ...

  9. MySQL(8) - MySQL的事务机制

    MySQL数据库的事务机制 1.1.事务的概念和特性 1.2.事务的隔离级别 repeatable read是mysql默认的事务隔离级别 #事务A #事务A,临时修改工资,未commit, STAR ...

随机推荐

  1. nginx - 性能优化,突破十万并发

    一般来说nginx配置文件中对优化比较有作用的为以下几项: worker_processes 8; nginx进程数,建议按照cpu数目来指定,一般为它的倍数. worker_cpu_affinity ...

  2. 【spring boot】映射properties文件属性--到Java对象

    描述 将*.properties中的内容映射到java对象中: 主要步骤 添加 @Component 注解: 使用 @PropertySource 注解指定配置文件位置: 使用 @Configurat ...

  3. 使用R语言-为矩阵(表格)的行列命名

    转自:http://www.dataguru.cn/article-2217-1.html R语言中经常进行矩阵(表格)数据的处理,在纷繁复杂的数据中,为其行列定义一个名字变得尤为重要.在处理巨量数据 ...

  4. JSON 简介

    ylbtech-JSON: JSON 简介 JSON:JavaScript Object Notation(JavaScript 对象表示法) JSON是存储和交换文本信息的语法,类似 XML. JS ...

  5. 学习笔记之Python Crash Course

    Python Crash Course https://www.safaribooksonline.com/library/view/python-crash-course/9781457197185 ...

  6. 读取 Excel 之 Epplus

    using (OpenFileDialog fd = new OpenFileDialog()) { fd.Filter = "Excel 2007文件(*.xlsx)|*.xlsx|所有文 ...

  7. [UE4]name slot一个种应用技巧

    如图所示“MouseOver”是一个Child Widget,是一个按钮. “Image_0”跟“MouseOver”是重叠在一起的,这样“Image_0”就会挡住“MouseOver”按钮的事件响应 ...

  8. 20165312 C语言基础调查和JAVA学习展望

    C语言基础调查和JAVA学习展望 一.有关学习技能的经历 掌握一项技能,我认为最重要的是练习和认真程度. 我在上幼儿园的时候学过电子琴,上台表演过多次,但是三四年之后就半途而废了,后来小学毕业之后对钢 ...

  9. KPPW2.7 漏洞利用--文件上传

    KPPW2.7 漏洞利用----文件上传 文件上传导致任意代码执行 搭建环境 1,集成环境简单方便,如wamp,phpstudy.... 2,KPPW v2.7源码一份(文末有分享)放到WWW目录下面 ...

  10. keras训练和保存

    https://cloud.tencent.com/developer/article/1010815 8.更科学地模型训练与模型保存 filepath = 'model-ep{epoch:03d}- ...