PDO--PHP Data Objects
PDO的环境配置:开启支持PDO 在php.ini配置文件里开启:
extension=php_pdo.dll
extension=php_pdo_mysql.dll 在PDO操作中涉及到类:PDO、PDOStatement(预处理对象)、PDOException(异常类) 一、 PDO类的构造方法:
---------------------------------------------------------
PDO __construct( string dsn
[, string username
[, string password
[, array driver_options]]] );
当中:dsn数据库连接信息如“mysql:host=localhost;dbname=库名”
dsn的格式:”驱动名:host=主机名;dbname=库名“
username:用户名
password:密码
driver_options:配置选项:
如: PDO::ATTR_PERSISTENT=>true,是否开启持久链接
*PDO::ATTR_ERRMODE=>错误处理模式:(能够是下面三个)(3)
PDO::ERRMODE_SILENT:不报错误(忽略)(0)
PDO::ERRMODE_WARNING:以警告的方式报错(1)
*PDO::ERRMODE_EXCEPTION:以异常的方式报错(推荐使用)。(2) $pdo = new PDO("mysql:host=localhost;dbname=lamp36db","root","root");
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
其它方法:
--------------------------------------------------------
1. query($sql); 用于运行查询SQL语句。返回PDOStatement对象
2. exec($sql); 用于运行增、删、改操作,返回影响行数;
3. getAttribute(); 获取一个"数据库连接对象"属性。
4. setAttribute(); 设置一个"数据库连接对象"属性。
5. beginTransaction 开启一个事物(做一个回滚点)
6. commit 提交事务
7. rollBack 事务回滚操作。
8. errorCode 获取错误码
9. errorInfo 获取错误信息
10.lastInsertId 获取刚刚加入的主键值。
11.prepare 创建SQL的预处理,返回PDOStatement对象
12.quote 为sql字串加入单引號。 预处理对象PDOStatement对象:
=============================================
我们能够通过PDO的方法来获取PDOStatement:
1.PDO的query(查询sql)方法获取,用于解析结果集
2.PDO的prepare(SQL)方法获取,用于处理參数式sql并运行操作。 PDOstatement对象的方法:
----------------------------------------------------------------
1、fetch() 返回结果集的下一行,结果指针下移,到头返回false 。
參数: PDO::FETCH_BOTH (default)、:索引加关联数组模式
PDO::FETCH_ASSOC、 :关联数组模式
PDO::FETCH_NUM、 :索引数组模式
PDO::FETCH_OBJ、 :对象模式
PDO::FETCH_LAZY :全部模式(SQL语句和对象) 2、fetchAll() 通过一次调用返回全部结果,结果是以数组形式保存
參数:PDO::FETCH_BOTH (default)、
PDO::FETCH_ASSOC、
PDO::FETCH_NUM、
PDO::FETCH_OBJ、
PDO::FETCH_COLUMN表示取指定某一列,
如:$rslist = $stmt->fetchAll(PDO::FETCH_COLUMN,2);取第三列
3、execute() 负责运行一个准备好了的预处理语句
4. fetchColumn()返回结果集中下一行某个列的值
5. setFetchMode()设置须要结果集合的类型
6. rowCount() 返回使用增、删、改、查操作语句后受影响的行总数
7. setAttribute()为一个预处理语句设置属性
8. getAttribute()获取一个声明的属性
9. errorCode() 获取错误码
10. errorInfo() 获取错误信息
11. bindParam() 将參数绑定到对应的查询占位符上
bool PDOStatement::bindParam ( mixed $parameter , mixed &$variable [, int $data_type [, int $length [, mixed $driver_options ]]] ) 当中: $parameter:占位符名或索引偏移量 &$variable:參数的值,须要按引用传递也就是必须放一个变量
当中參数:$data_type:数据类型PDO::PARAM_BOOL/PDO::PARAM_NULL/PDO::PARAM_INT/PDO::PARAM_STR/
PDO::PARAM_LOB/PDO::PARAM_STMT/PDO::PARAM_INPUT_OUTPUT
$length:指数据类型的长度 $driver_options:驱动选项。
12. bindColumn() 用来匹配列名和一个指定的变量名,这样每次获取各行记录时,会自己主动将对应的值赋给变量。
13. bindValue() 将一值绑定到对应的一个參数中
14. nextRowset() 检查下一行集
15. columnCount() 在结果集中返回列的数目
16. getColumnMeta() 在结果集中返回某一列的属性信息
17. closeCursor() 关闭游标,使该声明再次运行 在PDO中參数式的SQL语句有两种(预处理sql):
1.insert into stu(id,name) value(?,?); //?号式(适合參数少的)
2.insert into stu(id,name) value(:id,:name); // 别名式(适合參数多的)
在PDO中为參数式SQL语句赋值有三种:
1.使用数组
$stmt->execute(array("lamp1404","qq2"));
$stmt->execute(array("id"=>"lamp1404","name"=>"qq2"));
2.用法单个赋值
$stmt->bindValue(1,"lamp1901");
$stmt->bindValue(2,"qq2");
$stmt->execute(); $stmt->bindValue(":id","lamp1901",PDO::PARAM_STR); //带指定类型
$stmt->bindValue(":name","qq2",PDO::PARAM_STR);
$stmt->execute(); 3. 用法绑定变量
$stmt->bindParam(":id",$id);
$stmt->bindParam(":name",$name);
$id="lamp1401";
$name="qq2";
$stmt->execute(); 事务处理
-----------------------------------------------
事务:将多条sql操作(增删改)作为一个操作单元,要么都成功,要么都失败。(假设一次插入多条数据,一条运行失败,数据回滚,全部删除)----- 4. PDO对事务的支持
第一:被操作的表必须是innoDB类型的表(支持事务)
MySQL经常使用的表类型:MyISAM(非事务)增删改速度快、InnodB(事务型)安全性高
//更改表的类型为innoDB类型
mysql> alter table stu engine=innodb;
Query OK, 29 rows affected (0.34 sec)
Records: 29 Duplicates: 0 Warnings: 0
//查看表结构
mysql> show create table stu\G; 第二:使用PDO就能够操作数据库了
使用到了PDO中的方法:
beginTransaction 开启一个事物(做一个回滚点)
commit 提交事务
rollBack 事务回滚操作。 使用情况:当做多条sql语句处理时(增删改),要求是都必须成功。
PDO--PHP Data Objects的更多相关文章
- CS0012: 类型“System.Data.Objects.DataClasses.EntityObject”在未被引用的程序集中定义
entity framework,没在view引用 实体对象时,一直没问题,引用后爆出这个错误来 CS0012: 类型"System.Data.Objects.DataClasses.En ...
- Method not found : Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(Boolean)
找不到方法:“Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(Boolean) ...
- 使用EF6.0出现:CS0029 无法将类型“System.Data.Entity.Core.Objects.ObjectContext”隐式转换为“System.Data.Objects.ObjectContext”错误
这是因为EF6.0重构了一些命名空间后,和VS原有的实体数据模型模板不一致了(ObjectContext context = ((IObjectContextAdapter)dataContext). ...
- 类型“System.Data.Objects.DataClasses.EntityObject”在未被引用的程序集中定义。
说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地修改源代码. 编译器错误消息: CS0012: 类型“System.Data.Objects.DataClas ...
- 在vs2010使用EF出现CS0012: 类型“System.Data.Objects.DataClasses.EntityObject”在未被引用的程序集中定义
网上查了一通都是在web.config中配置 System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c56 ...
- 找不到方法:“Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(Boolean)
找不到方法:"Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(Boo ...
- 在使用EFCodeFirst中出现类型“System.Data.Objects.ObjectContext”在未被引用的程序集中定义的解决方案
我安装了EF4.1版本,并在一个项目中映射一个数据库并生成了EF的MODEL实体层 测试:在Default.aspx页面上加了个GridView控件,后台进行绑定 using System; usin ...
- ASP.NET MVC 程序 报错“CS0012: 类型“System.Data.Objects.DataClasses.EntityObject”在未被引用的程序集中定义”的解决办法
运行MVC程序,具体报错信息如下: 解决方法: 打开Web.config在assemblies下加入<add assembly="System.Data.Entity, Version ...
- PDO(PHP Data Object)数据访问抽象层
1.可以访问其它数据库2.具有事务功能3.带有预处理语句功能(防止SQL注入攻击) 访问数据库 PDO::__construct ( string $dsn [, string $username [ ...
随机推荐
- sql update 触发器 可获得被update的行的信息
类型:转载 sql update 触发器 可获得被update的行的信息,需要的朋友可以参考下. 复制代码 代码如下: create trigger TgName on tb for update ...
- Oracle Enterprise Manager 11g 输入用户名和口令 点击“登录”按键后没反应,也不报错,是什么原因?
在tnsnames.ora文件中检查设置好像没什么问题,用sqlplus也可以正常操作orcl 问题找到了,其实可简单,https://localhost:1158/em/console/logon/ ...
- VC++ 编译过程
一 前言 一开始编译C++代码的时候可能会对编译的错误觉得很难理解,搞不清楚究竟是哪里错了.了解编译过程,能够更好的处理编译错误. 二 名词解释 编译单元:当一个c或cpp文件在编译时,预处理器首先递 ...
- 200常用JS
.文本框焦点问题 onBlur:当失去输入焦点后产生该事件 onFocus:当输入获得焦点后,产生该文件 Onchange:当文字值改变时,产生该事件 Onselect:当文字加亮后,产生该文件 &l ...
- 记录:sea.js和require.js配置 与 性能对比
最近有点忙,很久无写博客,记录一下之前的配置require.js和sea.js的配置.(有误有望提出 require.js 文件目录 /app(项目使用js) /lib(require.js jq存放 ...
- golang并发编程
golang并发编程 引子 golang提供了goroutine快速实现并发编程,在实际环境中,如果goroutine中的代码要消耗大量资源时(CPU.内存.带宽等),我们就需要对程序限速,以防止go ...
- 用QComboBox实现tree状结构(QComboBox居然有setView和setModel函数)
实现的效果图如下: #include "mainwindow.h" #include <QApplication> #include <QTreeView> ...
- BZOJ 1023
program bzoj1023; uses math; ; maxn=; maxm=; type edge=record togo,next:longint; end; var n,m,cnt,in ...
- Android 中文API (67) —— BluetoothClass.Device.Major
前言 本章内容是android.bluetooth.BluetoothClass.Device.Major,为Android蓝牙部分的章节翻译,版本为Android 2.3 r1,翻译来自中山大学 ...
- Android 建造者(Builder)模式
关于 Builder 模式 详述:http://blog.csdn.net/jjwwmlp456/article/details/39890699 先来张图 看到 Android 中 使用了 Bui ...