PDO基础知识
使用PDO之前首先开启PHP的PDO扩展,方法见百度。
PDO连接数据库的方式有三种
1.通过参数的形式连接数据库 (推荐)
//通过参数形式连接数据库
try{
$dsn = 'mysql:host=localhost;dbname=test';
$username = 'root';
$passwd = '';
$options = array(PDO::ATTR_PERSISTENT=>TRUE); //设置属性[可选参数]
$pdo = new PDO($dsn, $username, $passwd, $options);
var_dump($pdo);
}catch(PDOException $e){
echo $e->getMessage();
}
2.通过URI的形式连接数据库
3.通过配置文件的形式连接数据库
首先在配置文件php.ini添加一行 pdo.dsn.test="mysql:localhost;dbname=test" //test是自定义的数据源名称
$dsn = 'test'; //配置文件中数据源名称
$username = 'root';
$passwd = '';
$pdo = new PDO($dsn, $username, $passwd);
PDO常用操作
exec() 执行一条sql语句,并返回受影响的行数(只对写数据操作有效,如增删改)
$sql =<<<EOF
insert into user2 values(1);
EOF;
$result = $pdo->exec($sql);
lastInsertId() 得到最后的自增的ID号
errorCode() 返回上一次操作的错误码
errorInfo() 返回上一次操作的错误信息
query() 执行查询SQL语句,返回关联+索引的二维数组,但是该方法也可以执行写数据库的SQL,只是不能返回受影响的行数。
prepare() 预处理
execute() 执行一条预处理命令
fetch() 从结果集里获取一行数据
fetchAll() 获取结果集里面的所有数据
$sql =<<<EOF
select * from user;
EOF;
$pre = $pdo->prepare($sql);
$info = $pre->execute(); while($row = $pre->fetch(PDO::FETCH_BOTH)){
var_dump($row);
echo "<br/>";
}
$result = $pre->fetchAll(PDO::FETCH_ASSOC);
getAttribute() 获取属性
setAttribute() 设置属性
rowCount() 返回查询的行数或者受影响的行数
nextRowset() 将指针移动到下一个结果集
防止SQL注入攻击
quote方法在字符串前面自动加上单引号并转义特殊符号
$pass = "' or 1 = 1 #";
$pass = $pdo->quote($pass);
//return '\' or 1 = 1 #'
预处理语句中的占位符使用
第一种占位符是 :的形式
$sql = " SELECT * FROM user WHERE id = :id AND name = :name ";
$pre = $pdo->prepare($sql);
$pre->execute(array(':id'=> , ':name'=>'b'));
$rsult = $pre->rowCount(); //返回查询的行数
第二种占位符是?的形式
$sql = " SELECT * FROM user WHERE id = ? AND name = ? ";
$pre = $pdo->prepare($sql);
$pre->execute(array( , 'b'));
$rsult = $pre->rowCount(); //返回查询的行数
bindParam()方法绑定参数
:变量占位符方式
$sql = " INSERT INTO user(id, name) VALUES (:id, :name)";
$pre = $pdo->prepare($sql);
$pre->bindParam(':id', $id, PDO::PARAM_STR); //绑定参数
$pre->bindParam(':name', $name, PDO::PARAM_STR); //绑定参数
$id = ;
$name = 'cj';
$pre->execute();
?占位符方式
$sql = " INSERT INTO user(id, name) VALUES (?, ?)";
$pre = $pdo->prepare($sql);
$pre->bindParam(, $id, PDO::PARAM_STR); //绑定参数
$pre->bindParam(, $name, PDO::PARAM_STR); //绑定参数
$id = ;
$name = 'cj';
$pre->execute();
bindValue() 绑定参数【跟bindParam大同小异】
设置PDO三种错误处理模式
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); //默认模式,静默模式
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); //警告模式
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //异常模式,推荐使用
PDO事务处理
事务是把很多SQL语句放在一起执行,如果某条出错,可以回滚到最初始的状态,这样可以保证流程的完整。
//关闭自动提交
setAttribute(PDO::ATTR_AUTOCOMMIT, 0);
rollBack(); //失败就回滚
commit(); //提交
inTransaction(); //检查是否在事务中
//关闭自动提交
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, );
//开启事务
$pdo->beginTransaction();
$sql1 = 'INSERT INTO user VALUES (13, "transaction")';
$action1 = $pdo->exec($sql1);
if($action1 == ){
echo '插入10失败';
$pdo->rollBack(); //失败就回滚
}
$sql2 = 'INSERT INTO user VALUES (10, "transaction")';
$action2 = $pdo->exec($sql2);
if($action2 == ){
echo '插入11失败';
$pdo->rollBack(); //失败就回滚
}
//检查是否在事务中
$position = $pdo->inTransaction();
$pdo->commit(); //提交
PDO基础知识的更多相关文章
- PDO 基础知识
PDO: 一.含义: 数据访问抽象层 二.作用 :通过PDO能够访问其它的数据库 三. 用法: 1.造对象 ①$dsn="mysql:dbname=zz(数据库名);host=localho ...
- MySQL_基础知识
-----基础知识 1.什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库 2.什么是关系型数据库.主键,外键,索引分别是什么? 关系型数据 ...
- .NET面试题系列[1] - .NET框架基础知识(1)
很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...
- RabbitMQ基础知识
RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- selenium自动化基础知识
什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...
- [SQL] SQL 基础知识梳理(一)- 数据库与 SQL
SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...
- [SQL] SQL 基础知识梳理(二) - 查询基础
SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...
- [SQL] SQL 基础知识梳理(三) - 聚合和排序
SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...
随机推荐
- js delete 用法
1,对象属性删除 function fun(){ this.name = 'mm'; } var obj = new fun(); console.log(obj.name);//mm delet ...
- 使用 PHP 读取文本(TXT)文件 并分页显示
<?php //----------------you should save this file as m.php---------------- session_start(); if (e ...
- Constructing Roads In JGShining's Kingdom(HDU 1025 LIS nlogn方法)
Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ...
- jquery中checkbox全选失效的解决方法
这篇文章主要介绍了jquery中checkbox全选失效的解决方法,需要的朋友可以参考下 如果你使用jQuery 1.6 ,代码if ( $(elem).attr(“checked”) ),将 ...
- 获取url 参数
epresssjs 里面请求参数,4.x 里面有3种方法 1.req.params app.get('user/:id',function(req,res){ res.send('user',req. ...
- Powershell变量的类型和强类型
Powershell变量的类型和强类型12 12月, 2011 在 Powershell tagged Powershell教程 / 变量 / 存储 / 数据 / 类型 by Mooser Lee ...
- Prime Palindrome Golf
Prime Palindrome Golf Do you know how to play Prime Palindrome Golf? You are given a number and your ...
- Shell工具:jsondiff.sh
逻辑很简单,无非就是通过curl在不同的服务器上取得结果集,然后diff即可,不过这里有几点需要注意的地方:首先,JSON就一行,直接 diff会失去意义:其次,JSON中汉字会被编码,不利于查看:另 ...
- 《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅳ
2.4.4 堆的算法 我们用长度为 N + 1的私有数组pq[]来表示一个大小为N的堆,我们不会使用pq[0],堆元素放在pq[1]至pq[N]中.在排序算法中,我们只能通过私有辅助函数less()和 ...
- PHP设计模式笔记一:准备工作 -- Rango韩老师 http://www.imooc.com/learn/236
一.编程字体选择 1.选择等宽字体 包括Courier New ,Consolas,Source Code Pro(推荐) 2.环境搭建(建议easyPHP) 二.开发符合PSR规范的基础框架 PSR ...