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 基础知识梳理 ...
随机推荐
- validatebox验证框架rules
项目前端使用JQuery easyui框架,验证使用插件validatebox,验证方法如下: <input name="test" type="text" ...
- 观《Terminal》之感
读书笔记系列链接地址http://www.cnblogs.com/shoufengwei/p/5714661.html. 经人推荐,用了几天时间欣赏了这部斯皮尔伯格导演的电影<Te ...
- 转载:常见EXE文件反编译工具
PE Explorer V1.99 R5 绿色汉化特别版_强大的可视化汉化集成工具 功能极为强大的可视化汉化集成工具,可直接浏览.修改软件资源,包括菜单.对话框.字符串表等: 另外,还具备有 W32D ...
- layout cannot be resolved or is not a field
去除代码activity代码页面顶部中的 import android.R;这句就可以消除红色波浪线的main cannot be resolved or is not a field类似这个错误了
- BZOJ 2436 NOI嘉年华(单调优化)
http://www.lydsy.com/JudgeOnline/problem.php?id=2436 题意:两个会场不能同时表演,但是同一个时间可以同时表演,要求让两个会场表演数量最小的最大,然后 ...
- 《Programming WPF》翻译 第8章 3.Storyboard
原文:<Programming WPF>翻译 第8章 3.Storyboard Storyboard是动画的集合.如果你使用了标记,所有的动画必须要被定义在一个Storyboard中.(在 ...
- ArcGIS API for Silverlight学习笔记
ArcGIS API for Silverlight学习笔记(一):为什么要用Silverlight API(转) 你用上3G手机了吗?你可能会说,我就是喜欢用nokia1100,ABCDEFG跟我都 ...
- Azure Storage Client Library 重试策略建议
有关如何配置 Azure Storage Library 重试策略的信息,可参阅 Gaurav Mantri 撰写的一篇不错的文章<SCL 2.0 – 实施重试策略>.但很难找到关于使用何 ...
- OpenstackHigh-level-service
1,yum -y install openstack-cinder;
- 【桌面虚拟化】之三 Persistent vs NonP
作者:范军 (Frank Fan) 新浪微博:@frankfan7 在[桌面虚拟化]之二类型及案例中我们探讨了桌面虚拟化的两种架构,HostedVirtual Desktop (VDI) 和 Publ ...