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 [ ...
随机推荐
- solr6环境搭建
1.下载并安装jdk1.8,配置环境变量 2.下载并安装tomcat8(8以上) 3.下载solr源码,转变部署solr a)[solr-6.2.0\server\solr-webapp]下的weba ...
- Eclipse怎么全局搜索替换(整个项目)
链接地址:http://jingyan.baidu.com/article/3ea51489c1c0d752e61bba2e.html 我们用Eclipse编程,有时候需要将整个项目的某个字符串替换成 ...
- sort 与 qsort
很长一段时间搞不明白 sort 和 qsort 的区别,平时在写程序时习惯了使用 sort ,因为它用起来比 qsort 要简单的多 , 这里详细介绍一下 sort 与 qsort : 给出一个数组 ...
- OpenGL: 环境配置和图元的绘制
前言 距离上一篇博客已经过去一个半月了,这段时间过得确实充实,虽然一大段时间泡在图书馆复习,但至少也能学到点东西.跨年晚和元旦一整天,全身心投入图形学小课设的编程,终于实现了老师要求的所有功能,回想起 ...
- Android 开发笔记 “java.util.Calendar.compareTo()”
java.util.Calendar.compareTo() 方法比较Calendar对象和anotherCalendar对象之间的时间值(毫秒偏移量). 声明 以下是java.util.Calen ...
- C++ 面向对象学习1
#include "stdafx.h" #include <iostream> //不要遗漏 否则不能使用cout using namespace std; class ...
- (C#)Windows Shell 外壳编程系列8 - 同后缀名不同图标?
原文 (C#)Windows Shell 外壳编程系列8 - 同后缀名不同图标? (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:(C#)Windows Shell 外壳 ...
- [C++ Basic] Const 用法
定义: const 主要用于声明常量.当常量为对象时,对象值不可改变:当常量为指针时,该指针不可移动或重新赋值,但我们可以通过它去修改该指针的指向对象的值(前提是无需移动指针的修改).所谓的形参.返回 ...
- C功底挑战Java菜鸟入门概念干货(二)
(接上篇博文:C功底挑战Java菜鸟入门概念干货(一)) 一.Java面向对象程序设计-类的基本形式 1.“类”是把事物的数据与相关的功能封装在一起,形成的一种特殊结构,用以表达对真实世界的一种抽象概 ...
- onpagehide、onunload 和 onpageshow、onload事件疑惑
今天在最新版本chrome浏览器中测试在什么情况下会触发onpagehide.onunload事件(点击一个链接,刷新页面,提交表单,关闭浏览器等).测试代码粘贴如下: <!DOCTYPE ht ...