PDO:php data object,php数据对象
1、new PDO
PDO::__construct ( string $dsn
[, string $username
[, string $password
[, array $driver_options
]]] )
$dsn:服务器相关信息,包括
1)选取哪一种数据库
2)服务器域名
3)连接到数据库的端口号
4)连接的数据库
$username:登陆的用户名
$password:登陆密码
例如:
$pdo = new PDO('mysql:host=localhost;port=3306;dbname=project','root','root');
2、exec(),执行没有结果集返回的语句,返回受影响的行数
如:增、删、改、设置字符集 等等...
例如:
2.1)设置字符集
$sql = "set names utf8";
$pdo->exec($sql);
2.2)增
$sql = "insert into pro_student values(null,'陶丹凤','itcast0013',1,19,2)";
$pdo->exec($sql);
2.3)删
$sql = "delete from pro_student where s_id = 12";
$affected_rows = $pdo->exec($sql);
2.4)改
$sql = "update pro_student set c_id = 3 where s_id = 12";
$affected_rows = $pdo->exec($sql);
3、query(),执行有结果集返回的语句,返回结果集
如:查询表数据,查询数据库中有多少表
例如:
3.1)查询表
$sql = "show tables";
$stmt = $pdo->query($sql); //返回的是PDOStatement类对象(结果集对象)
3.2)查询表中数据
$sql = "select * from pro_student order by s_age limit 1";
$stmt = $pdo->query($sql); //执行得到PDOStatement对象
var_dump($stmt->fetch()); //从结果集中解析数据
4、结果集对象(PDOStatement)方法
fetch()、fetchColumn()、fetchObject()、fetchAll() 处理结果集中的数据
4.1)fetch():取出结果集中的第一行数据
mxied PDOStatement::fetch ([ int $fetch_style
[, int $cursor_orientation
= PDO::FETCH_ORI_NEXT [, int $cursor_offset
= 0 ]]] )
参数:
$fetch_style:几种常用的常量
PDO::FETCH_BOTH(默认):返回一个索引为结果集列名和以0开始的列号的数组 PDO::FETCH_NUM:返回一个索引为以0开始的结果集列号的数组
PDO::FETCH_ASSOC:返回一个索引为结果集列名的数组
PDO::FETCH_NUM:返回一个索引为以0开始的结果集列号的数组
4.2)fetchColumn():取出结果集中第一行的某一列的数据
string PDOStatement::fetchColumn ([ int $column_number
= 0 ] )
参数:
$column_number:需要返回的列,该参数只能为数字,不能为列名
4.3)fetchObject():获取下一行并作为一个对象返回
mxied PDOStatement::fetchObject ([ string $class_name
= "stdClass" [, array $ctor_args
]] )
参数:
$class_name = "stdClass":类名称
stdClass:标准类,空类
$str = ‘abcd’;
$o = (object)$str; //得到的对象就是stdClass对象
若用户指定了类,则该类必须在当前脚本中存在(若不存在,自己定义一个对应空类即可)
例如:
$sql = "select * from pro_student";
var_dump($stmt->fetchObject('Person'));
class Person{}
4.4)fetchAll():返回一个包含结果集中所有行的数组
array PDOStatement::fetchAll ([ int $fetch_style
[, mixed $fetch_argument
[, array $ctor_args
= array() ]]] )
例如:
$sql = "select * from user";
$stmt = $pdo->query($sql);
var_dump($stmt->fetchAll(PDO::FETCH_NUM));
4.5)bindColumn与fetch联合使用
bindColumn:绑定一列到一个 PHP 变量
bool PDOStatement::bindColumn ( mixed $column
, mixed &$param
[, int $type
[, int $maxlen
[, mixed $driverdata
]]] )
例如:
$sql = "select * from user";
$stmt = $pdo->query($sql);
$stmt->bindColumn('s_name',$name); //将s_name列的内容赋值给$name变量
$stmt->bindColumn(3,$number); //判断的索引从1开始,将第3列的内容赋值给$number变量
var_dump($stmt->fetch()); //执行完$stmt->fetch()后,就将对应内容绑定到变量中去了
echo $name,$number;
作用:为了操作方便,为了弥补fetchColumn只能获取一个字段值的缺陷。
5、关闭连接
PDO没有关闭连接的方法,但是由于PHP提供了垃圾回收机制,所以将$pdo指向为null,或者unset($pdo)后,因为回收机制,连接就断开了
$pdo = null
或
unset($pdo);
具体例子:
<?php header('Content-type:text/html;charset=utf-8'); echo '<pre>'; //fetch查询 //1. 连接数据库 $pdo = new PDO('mysql:host=localhost;port=3306;dbname=project','root','root'); //var_dump($pdo); //2. 设置字符集 $sql = "set names utf8"; $pdo->exec($sql); //3. 准备查询SQL语句 $sql = "select * from pro_student"; //调用query方法 $stmt = $pdo->query($sql); //1. 获取混合数组 //var_dump($stmt->fetch()); //混合数组 //2. 得到一个关联数组 //echo PDO::FETCH_ASSOC; //var_dump($stmt->fetch(PDO::FETCH_ASSOC)); //var_dump($stmt->fetch(2)); //3. 索引数组 //var_dump($stmt->fetch(PDO::FETCH_NUM)); //4. 得到全部数组(关联) //var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); //fetchColumn //var_dump($stmt->fetchColumn()); //默认获取到第一列的数据 //var_dump($stmt->fetchColumn(1)); //获取第二列的数据(一个字段值) //var_dump($stmt->fetchColumn('s_name')); //错误 //fetchObject //var_dump($stmt->fetchObject()); //class Person{} //var_dump($stmt->fetchObject('Person')); //bindColumn,将指定结果集中的fetch所得到的记录中某个字段值,赋值给指定变量 $stmt->bindColumn('s_name',$name); $stmt->bindColumn(3,$number); //判断的索引从1开始 var_dump($stmt->fetch()); echo $name,$number; $stmt->fetch(); echo $name,$number; //遍历结果集 //for循环实现fetchAll //知道循环条件边界 $length = $stmt->rowCount(); $all = array(); for($i = 0;$i < $length;$i++){ //将每次得到的一个关联数组存放到all数组中 $all[] = $stmt->fetch(PDO::FETCH_ASSOC); } //var_dump($all);
$pdo = null; //关闭连接