预处理

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

例如:

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

$host = 'localhost';
$port = 3306;
$dbname = 'pdo';
$user = 'root';
$pass = '123';
$dsn = "mysql:host={$host};port={$port};dbname={$dbname}";
try {
$mysql = new PDO($dsn,$user,$pass);
} catch (Exception $e) {
echo 'connect failure !';
die();
} $id = '1 or 1=1'; //ID模拟从前端获取的删除数据的ID
$sql = "DELETE FROM `books` WHERE id={$id}";
$mysql->exec($sql);

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

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

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

语法:

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

查询

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

扩展:TP中预查询

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

事务机制

$mysql->beginTransaction();    //开启事务机制
$sql = "UPDATE `books` SET name='mysql and PHP...' WHERE id < 100 ";
$mysql->exec($sql);
//根据业务执行以下语句
$mysql->rollBack(); //回滚
$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. ckeditor_4.5.10_full,ckfinder_aspnet_2.6.2,插件使用

    1.ckfinder文件上传的权限: public override bool CheckAuthentication() { // WARNING : DO NOT simply return &q ...

  2. Hadoop错误集:Journal Storage Directory not formatted

    类型一: 当你从异常信息中看到JournalNode not formatted,如果在异常中看到三个节点都提示需要格式化JournalNode. 如果你是新建集群,你可以重新格式化NameNode, ...

  3. Socket调用Close后如何终止套接口的问题

    setsockopt 设置 SO_LINGER 选项 此选项指定函数close对面向连接的协议如何操作(如TCP).内核缺省close操作是立即返回,如果有数据残留在套接口缓冲区中则系统将试着将这些数 ...

  4. MyBatis 别名标签 & sql的复用

    1.MyBatis 别名标签 如果在映射文件中,大量使用类名比较长,可以在sqlMapConfig.xml声明别名, 在映射文件中可以使用别名缩短配置,注意此配置要放在最前面 sqlMapConfig ...

  5. linux中文件名有英文括号的问题

    文件名包含“()”的文件,输入“(“后按TAB键无法补全,手动输入文件全名也删除不了:提示bash: syntax error near unexpected token `('错误. 在linux中 ...

  6. [UE4]Get All Widgets Of Class、Get All Widgets with Interface,根据类名或者接口UI实例对象

    Get All Widgets Of Class.Get All Widgets with Interface,是系统蓝图函数库提供的方法,可以在任何蓝图中使用. 可以方便地获得UI实例对象,进而使用 ...

  7. win7运行bat文件 一闪而过 解决 必须要将生成器放在C盘等没有中文的目录里

    1.在*.bat所在的文件夹按住shift 键然后鼠标右键,选择“在此处打开命令窗口”, 2.输入bat文件名称然后回车 这样就不会自动消失(只在win7 x64 上尝试过)

  8. golang 反射应用(二)

    golang反射应用(二) package test import ( "reflect" "testing" ) //定义适配器 func TestRefle ...

  9. FileMaker Server 15 Windows 安装

    FileMaker 国外流行,国内研究的人不多.这玩意的好处是: 标准的数据库软件,同时带界面,相当于Access. 手机上安装FileMaker Go,Windows & IOS上安装 Fi ...

  10. Windows配置多个git用户

    Window配置多个Git账户,SSH连接GitHub.GitLab 最新版本GIt配置对应多个Git仓库(不需要添加多个用户名和邮箱): 在本地git上添加一个用户名和邮箱,生成一对公钥和私钥,把公 ...