mysql PDO

MySQL PDO

Posted by Lv Hui on June 26, 2014

PDP概述

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

开启PDO

linux下开启

  • 如果你正在使⽤用PHP5.1版本,PDO和PDO SQLITE已经包含在了此 发行版中
  • yum –y install php-pdo

window下开启

  • Window开启PDO需要修改php.ini文件,先将extension=php_pdo.dll前面的分号去掉
  • 将需要的数据库驱动开启,如将;extension=php_pdo_mysql.dll前的分号去掉, 就开启了MYSQL数据库驱动,可以使用PDO抽象层操作 MYSQL了,其他数据库操作也是 按这种方式操作

php中使用PDO

返回数据

1
2
3
4
5
6
7
8
//只获得关联数组
$result->fetchAll(PDO::FETCH_ASSOC)
//获得索引数组
$result->fetchAll(PDO::FETCH_NUM) 
//得到关联和索引所表示的数据
$result->fetchAll(PDO::FETCH_BOTH) 
//得到对象形式表示的数据
$result->fetchAll(PDO::FETCH_OBJ)

错误处理

PDO::ATTR_ERRMODE 错误提示

1
2
3
4
5
6
//不显示错误信息
PDO::ERRMODE_SILENT
//显示警告错误
PDO::ERRMODE_WARNING 
//抛出异常
PDO::ERRMODE_EXCEPTION 

有结果集操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
header('content-type:text/html;charset=utf-8');

//指定要连接的数据库信息
$dsn = 'mysql:host=localhost;dbname=hd82';
$username = 'root';//数据库服务器用户名
$password = 'root';//数据库服务器密码
//如果在try之中产生了"PDO的异常错误"会被catch捕捉到
try {
	//连接数据库并且选择数据库
	$pdo = new PDO($dsn, $username, $password);
	//设置错误(异常错误,能被catch捕获到)
	$pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	//设置字符集(根据客户端的字符集来设置)
	//	query是运行有结果集的sql语句
	$pdo -> query("set names utf8");
	//发送sql语句
	$result = $pdo -> query("select * from stu");
	//从结果集对象获得数组
	//PDO::FETCH_ASSOC 获得关联数组
//	获得比较干净的关联数组
	$data = $result->fetchAll(PDO::FETCH_ASSOC);

	print_r($data);

} catch (PDOException $e) {//捕获错误之后,由开发人员自由处理
	echo "<span style='color:red'>" . $e -> getMessage() . "</span>";
}
?>

获得返回值

1
2
3
4
5
6
7
8
9
//获得全部数据
$data = $result->fetchAll(PDO::FETCH_ASSOC);
//获得单条数据
$data = $result->fetch(PDO::FETCH_ASSOS);
//while循环获得全部数据
$data=array();
while($result->fetch(PDO::FETCH_ASSOS)){
	$data[]= $result->fetch(PDO::FETCH_ASSOS);
}

无结果集操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
header('content-type:text/html;charset=utf-8');

//指定要连接的数据库信息
$dsn = 'mysql:host=localhost;dbname=hd82';
$username = 'root';//数据库服务器用户名
$password = 'root';//数据库服务器密码
//如果在try之中产生了"PDO的异常错误"会被catch捕捉到
try {
	//连接数据库并且选择数据库
	$pdo = new PDO($dsn, $username, $password);
	//设置错误(异常错误,能被catch捕获到)
	$pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	//设置字符集(根据客户端的字符集来设置)
	$pdo -> query("set names utf8");
	//	exec是执行无结果集操作
//	返回被删除的条数
	$result = $pdo -> exec("delete from stubak order by age desc limit 2");
	echo "成功删掉{$result}条数据";

} catch (PDOException $e) {//捕获错误之后,由开发人员自由处理
	echo "<span style='color:red'>" . $e -> getMessage() . "</span>";
}
?>

预处理

预准备语句句是SQL语句编译后形成的模板,也就是说语句句只解析一次, 以后只要传替不同的参数就可以了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
header('content-type:text/html;charset=utf-8');

//指定要连接的数据库信息
$dsn = 'mysql:host=localhost;dbname=hd82';
$username = 'root';
//数据库服务器用户名
$password = 'root';
//数据库服务器密码
//如果在try之中产生了"PDO的异常错误"会被catch捕捉到
try {
//	链接数据库
	$pdo = new PDO($dsn, $username, $password);
//	定义sql语句模板
	$sql = "insert into stu(name,age) values(?,?)";
//	对语句预处理
	$state = $pdo -> prepare($sql);
	$name = $_GET['name'];
	$age = $_GET['age'];
//	定于语句模板中的参数
//	第三个是参数类型
	$state -> bindParam(1,$name, PDO::PARAM_STR);
	$state -> bindParam(2,$age, PDO::PARAM_INT);
	$row = $state -> execute();
	print_r($row);
} catch (PDOException $e) {
	$e -> getMessage();
}
?>