Home > php教程 > php手册 > pdo用法学习笔记

pdo用法学习笔记

WBOY
Release: 2016-05-25 16:51:04
Original
764 people have browsed it

一、基本概念

1、PDO:PHP Data Object的缩写。PDO扩展类库为PHP定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。

PDO就是一个"数据库访问抽象层",作用是统一各种数据库的访问接口。

2、对任何数据库的操作,并不是使用PDO扩展本身执行的,必须针对不同的数据库服务器使用特定的PDO驱动程序访问。如:MYSQL(PDO_MYSQL)。可以在phpinfo()函数中查看PDO部分的列表。

二、PDO的安装

1、Linux:安装PHP时,向configure命令中添加如下标志:

-with-pdo-mysql=/usr/local/mysql //其中/usr/local/mysql为mysql安装目录

2、Windows:在C:windows下找到php.ini文件

(1)打开:extension=php_pdo.dll

(2)打开:extension=php_pdo_mysql.dll

三、使用PDO过程

1、连接数据库

(1)创建PDO对象

(2)设置PDO行为属性(setattribute())

(3)设置字符集($link->query('set names UTF8'))

2、发送SQL语句

(1)准备SQL语句

(2)执行发送

3、查看结果

四、连接数据库

1、创建PDO对象:

(1)$link = new PDO(DSN, 用户名, 密码, 驱动属性);

1)DSN:数据源名,用来定义一个必须用到的驱动程序和要使用的数据库。mysql的DSN格式:'mysql:host=localhost;dbname=lamp30'

2)可以将DSN放到文件里,如:'uri:file:///usr/local/dsn.txt'

3)创建对象时要使用try…catch语句,因为在声明PDO实例发生错误时,会自动抛出一个异常。如:

try{ 

$link = new PDO('mysql:host=localhost;dbname=lamp30','root','111111'); 

}catch(PDOException $e){ 

echo $e->getMessage(); 

exit('连接数据库错误.'); 

2、驱动属性

(1)可以将必要的几个选项组成数组(属性名作为元素键,属性值作为元素值)传递给构造方法的第四个参数。如果没有在构造方法中定义驱动属性,可以在之后使用PDO类的setattribute()函数定义各个属性。

(2)书P501页有这些属性中文释义。

3、设置字符集:$link->query('set names UTF8')

五、发送SQL语句

(1)$link->exec():执行增删改,返回受影响行数,执行失败返回false或0。

(2)$link->query():执行查询,返回PDOStatement结果集对象。

六、查询结果

1、非查询:

(1)直接用$link->exec()的返回影响行数

(2)$link->lastInsertId()返回最后一条INSERT命令生成的AUTO_INCREMENT编号值

2、见预处理

七、预处理

1、第二步:发送SQL语句

$stmt = $link->prepare('select * from user where id=:id'); 
$stmt->bindparam(':id', $id, PDO::PARAM_INT); 
$id = 2; 
$stmt->execute();
Copy after login

bindParam()参数有以下7种:可以不用写

PDO::PARAM_INT

PDO::PARAM_STR

PDO::PARAM_BOOL

PDO::PARAM_NULL

PDO::PARAM_LOB:大对象数据类型

PDO::PARAM_STMT:PDOstatement类型

PDO::PARAM_INPUT_OUTPUT:存储过程使用的数据类型

2、第三步:如:

$stmt = $link->query('select * from user');

(1)fetch()方法

$pdoStat ->bindColumn(1, $id);                 //第一个参数可以是从1开始的索引值 
$pdoStat ->bindColumn('name', $name);    //也可以是列名 
$pdoStat ->bindColumn('pass', $pass); 
while($row = $stmt ->fetch(PDO::FETCH_BOUND)){ 
echo $id.' '; 
echo $name.' '; 
echo $pass.&#39;<br>&#39;; 
}
Copy after login

fetch()参数有六种:见手册,可以用setFetchMode()方法设置默认模式。

(2)fetchall()方法,代码如下:

$result = $stmt ->fetchall(); 
foreach($result as $row){ 
echo $row[&#39;id&#39;].&#39; &#39;; 
echo $row[&#39;name&#39;].&#39; &#39;; 
echo $row[&#39;pass&#39;].&#39;<br>&#39;; 
}
Copy after login

Fetchall()参数与fetch()相同。

八、事务处理

1、关闭自动提交(在驱动属性中修改)

2、打开事务

3、提交事务/回滚

4、打开自动提交,如:

$link = new PDO(&#39;mysql:host=localhost;dbname=lamp30&#39;); 
//1 
$link->setattribute(PDO::ATTR_AUTOCOMMIT, false); 
//2 
$link->begintransaction(); 
$result = $link->exec(&#39;insert into user(name,paa) values(&#39;wsy&#39;,&#39;111&#39;)&#39;); 
//3 
if($result){ 
$link->commit(); 
}else{ 
$link->rollback(); 
} 
//4
Copy after login

$link->setattribute(PDO::ATTR_AUTOCOMMIT, true); 

九、PDO对象中的成员方法

1、$link->getattribute(属性名):获取一个驱动属性。

2、$link->setattribute(属性名,属性值):设置一个驱动属性。

1)因oracle把空字符串返回为NULL值,而其它数据库无此特性,为了有更好的兼容性$link->setattribute(PDO::ATTR_ORACLE_NULLS ,PDO::NULL_EMPTY_STRING,);

2)有三种显示错误的方式:静态、WARNING消息、异常

3、$link->errorcode():获取错误码。

1)如setattribute函数设置显示错误方式为静态,则出现错误时什么都不显示,必须调用此函数,才能查看错误号。

4、$link->errorinfo():获取错误信息(数组)。

1)如setattribute函数设置显示错误方式为静态,则出现错误时什么都不显示,必须调用此函数,才能查看错信息。

5、$link->lastinsertid():获取插入到表中的最后一条数据主键值(如有多条数据同时插入,返回第一个插入行的ID)。

6、$link->prepare():发送准备的SQL语句,返回PDOStatement对象。

7、$link->begintransaction():打开事务。

8、$link->commit():提交一个事务,执行一个SQL。

9、$link->rollback():回滚一个事务。

十、错误模式

1、静态模式:代码如下

$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT)

(1)默认模式,在错误发生时不进行任何操作,PDO将只设置错误代码。

(2)查看错误可以调用errorCode()和errorInfo(),PDO和PDOStatement类都有这两个方法。

2、警告模式:代码如下 

$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING)

(1)此模式在设置错误代码以外,PDO还将发出一条PHP传统的E_WARNING消息。

(2)这是mysql和mysqli显示错的方式。

3、异常模式:代码如下

$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)

(1)此模式在设置错误代码以外,PDO还将抛出一个PDOException,并设置其属性,以反映错误代码和错误信息。

(2)如果异常导致脚本终止,则事务将自动回滚。

(3)PDO推荐使用此模式。

十一、持久连接,代码如下

$link->setAttribute(PDO::ATTR_PERSISTENT, true);

持久连接即当脚本执行结束时不会自动断开连接,而且用$link->close()不能关闭连接。


本文地址:

转载随意,但请附上文章地址:-)

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template