host tran 索引 分别是 输出结果 sql 语句 conf sybase
PHP PDO 操作 MYSQL
学习要点:
1、 PHP PDO 配置
2、 连接 mysql 及异常处理
3、 query,exec 用法详解
4、 预处理 prepare() 用法详解
5、 PDO 错误处理模式和事务处理
6、 获取和遍历结果集
7、 常用函数说明
我的博客:
一、 PDO 配置
PHP 数据对象 (PDO) 扩展可以支持绝大多数的主流的数据库,如下
它为多种数据库的查询和获取数据,提供了一个统一的接口(数据抽象层),可以用相同的函数(方法)去实现编程要求,并且不会为数据库的迁移重写。
PDO 随 PHP5.1 发行,在 PHP5.0 的 PECL 扩展中也可以使用,无法运行于之前的 PHP 版本。
你可以通过 PHP 的 phpinfo() 函数来查看是否安装了 PDO 扩展。
Unix 或 Linux 用户添加以下扩展:extension=pdo.so
Windows 用户
PDO 和所有主要的驱动作为共享扩展随 PHP 一起发布,要激活它们只需简单地编辑 php.ini 文件,并添加以下扩展:
extension=php_pdo.dll
这一步在 PHP 5.3 及更高版本中可省略,对于 PDO 不再需要做为一个 DLL 文件。
除此之外还有以下对应的各种数据库扩展:
;extension=php_pdo_firebird.dll
;extension=php_pdo_informix.dll
;extension=php_pdo_mssql.dll
;extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_oci8.dll
;extension=php_pdo_odbc.dll
;extension=php_pdo_pgsql.dll
;extension=php_pdo_sqlite.dll
如果需要启动那个数据库的模块,只需要去除前面的 ";"。
例如需要用 PDO 操作 MYSQL, 那么只要将 php.ini 文件中的语句中的
;extension=php_pdo_mysql.dll
改成
extension=php_pdo_mysql.dll
保存后重启 PHP 或 web 服务器,然后运行一下 PHP 的 phpinfo() 函数来查看是否成功安装了 PDO 扩展
二、 连接 mysql 及异常处理
测试数据:
创建一个班级数据库 school,里面包含一张班级表 grade,包含编号 (id)、姓名 (name)、邮件 (email)、评分 (point)、注册日期 (regdate).
mysql 执行代码如下:
mysql>CREATE DATABASE school;
mysql> CREATE TABLE grade (
-> id TINYINT(2) UNSIGNED NOT NULL AUTO_INCREMENT,
-> name VARCHAR(20) NOT NULL,
-> email VARCHAR(40),
-> point TINYINT(3) UNSIGNED NOT NULL,
-> regdate DATETIME NOT NULL,
-> PRIMARY KEY (id) -> );
// 给这个班级表 grade 新增几条学员记录
mysql> INSERT INTO grade (name,email,point,regdate) VALUES
('zend',[email protected],95,NOW());
// 依次增加
在 web 目录下新建 config.php, 代码如下 :
<?php
header('Content-Type:text/html; charset=utf-8');
define('DB_MS', 'mysql');
define('DB_HOST', 'localhost');
define('DB_NAME', 'school');
define('DB_USER', 'root');
define('DB_PASS', '');
$dsn=DB_MS.':host='.DB_HOST.';dbname='.DB_NAME;
try {
//$DB=new PDO($dsn,DB_USER,DB_PASS, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
$DB=new PDO($dsn,DB_USER,DB_PASS);
$DB->exec('SET NAMES UTF8');
echo "数据库连接成功!"."<br />";
ignore_user_abort();
}catch (PDOException $e){
exit("数据库连接错误提示!:".$e->getMessage()."<br />");
};
>
- 默认不是长连接,数据库长连接,需要最后加一个参数:
- $DB = new PDO($dsn, DB_USER, DB_PASS, array(PDO: :ATTR_PERSISTENT = >true));
- 长连接的作用我觉得是在高负载的情况下,通过复用长连接,减少了每个页面的建立数据库连接的时间, 能够加快网站响应速度,提高用户体验。
三、 query,exec 用法详解
PDO::query(): 执行 SQL 语句,返回 PDOStatement 对象 (结果集).
缺点:多次使用报 non-object 错误 (待实例证明).
优点:可以直接遍历对象. 主要用于 SELECT 操作。
代码如下:
Web 目录下新建 demo.php 文件
<?php
header('Content-Type:text/html; charset=utf-8');
require 'config.php';
$query="SELECT id,name,email,point,regdate FROM grade";
$DB->exec('SET NAMES UTF8');
$rs=$DB->query($query);
foreach ($rs as $row){
echo $row['id']."---".$row['name']."---".$row['email']."---".$row['point']."---".$row['regdate'];
echo "<br />";
ignore_user_abort();
};
>
有关文档提出 query 执行后,query() 用于执行一次 SELECT 语句,执行后应当随即使用 PDOStatement::fetch() 或其它获取方法语句将结果取出,否则立即进行下一次的 PDO::query() 将会报 non-object 错误。
除非我们调用 PDOStatement::closeCursor() 来释放数据库资源与 PDOStatement 对象。
可是本人在本地测试的时候,没有使用 closeCursor() 或者 null(),未发生多次使用 query 查询的异常,测试代码如下:
<?php
header('Content-Type:text/html; charset=utf-8');
require 'config.php';
$query="SELECT id,name,email,point,regdate FROM grade";
$rs=$DB->query($query);// 不获取结果集
// while ($row=$rs->fetch(PDO::FETCH_ASSOC)){
// var_dump($row);
// echo "<br />";
// };
// $rs=null;// 貌似这里要写 null, 可是不写好像也没关系,纠结中。
// $rs->closeCursor();// 或用关闭游标, 同样不写也没事。
echo "start using agin";// 开始再次查询
$query="SELECT name,point FROM grade";
$rs2=$DB->query($query);
while ($row2=$rs2->fetch(PDO::FETCH_NUM)){
var_dump($row2);
echo "<br />";
};
echo "end";// 查询结束没有问题
>
那么这样做的目的是什么呢?个人认为是防止错误和释放服务器内存,请朋友举证。
PDO::exec—执行一条 SQL 语句,并返回受影响的行数。
缺点:不适用 SELECT 操作,因为不能返回结果集,无法遍历,只能按照官方建议去使用 query 或 prepare 函数。
优点:支持 SELECT/DELETE/UPDATE/INSERT 等全部 SQL 语句执行
代码如下:
Web 目录下新建 demo.php 文件
<?php
header('Content-Type:text/html; charset=utf-8');
require 'config.php';
$query="SELECT id,name,email,point,regdate FROM grade";
$rs=$DB->query($query);
foreach ($rs as $row){
echo $row['id']."---".$row['name']."---".$row['email']."---".$row['point']."---".$row['regdate'];
echo "<br />";
};
echo "<br />start";
$exec="INSERT INTO grade (name,email,point,regdate) VALUE ('爱莉斯',[email protected],'90',NOW())";
$rs=$DB->exec($exec);
var_dump($rs);// 返回值
echo "<br />end";
$DB=null;// 释放内存
>
四、 预处理 prepare() 用法详解
比较 query 和 exec,预处理操作更方便,快捷,安全。
方便:预处理一次,以不同参数可执行N次。
快捷:避免重复编译执行,占服务器内存少,响应快。
安全:预处理的参数自动转义,相对安全防止 SQL 注入。
1、简单的预处理,代码如下:
<?php
header('Content-Type:text/html; charset=utf-8');
require 'config.php';
$sql="DELETE FROM grade WHERE name='爱莉斯'";
$delete=$DB->prepare($sql);// 预处理
$delete->execute();// 执行
$count=$delete->rowCount();// 返回处理过多少行数
echo $count;
>
PS: PDOStatement::rowCount() 返回受 DELETE、INSERT、 或 UPDATE 语句影响的行数。
2、占位符的使用:分别是问号参数、命名参数.
Ps: 绑定参数
PDOStatement::bindParam — 绑定一个参数到指定的变量名.
PDOStatement::bindValue — 把一个值绑定到一个参数.
传统方式插入数据,代码如下;
<?php
header('Content-Type:text/html; charset=utf-8');
require 'config.php';
$sql="INSERT INTO grade (id,name,email,point,regdate) VALUE (null,'爱莉斯',[email protected],'95',NOW())";
$insert=$DB->prepare($sql);
$insert->execute();
echo $insert->rowCount();
$sql=null;
>
问号参数绑定方式代码如下:
header('Content-Type:text/html; charset=utf-8');
require 'config.php';
$sql="INSERT INTO grade (id,name,email,point,regdate) VALUE (?,?,?,?,?)";
$insert=$DB->prepare($sql);
$time=date('Y-m-d H:i:s',time()+(8*60*60));
// 第一种绑定方式
/* $insert->bindValue(1,null);
$insert->bindValue(2,'爱莉斯');
$insert->bindValue(3, [email protected]);
$insert->bindValue(4,'98');
$insert->bindValue(5, $time); */
// 第二种绑定方式
/* $insert->bindParam(1, $id);
$insert->bindParam(2, $name);
$insert->bindParam(3, $email);
$insert->bindParam(4, $point);
$insert->bindParam(5, $regdate);
$id=null;
$name="苏菲";
[email protected];
$point='98';
$regdate=$time; */
// 第三种绑定方式
/* $insert->execute(array(null,'凯撒',[email protected],'90',$time)); */
$insert->execute(array(null,'凯撒',[email protected],'90',$time));
$count=$insert->rowCount();
echo "<br /> 查询执行完毕!改变的行数为:".$count;
$sql=null;
>
命名参数绑定方式代码如下:
<?php
header('Content-Type:text/html; charset=utf-8');
require 'config.php';
$sql="INSERT INTO grade (id,name,email,point,regdate) VALUE (:id, :name, :email, :point, :regdate)";
$insert=$DB->prepare($sql);
$time=date('Y-m-d H:i:s',time()+(8*60*60));
// 第一种绑定方式
/* $insert->bindValue("id", null);
$insert->bindValue("name", 'caesar');
$insert->bindValue("email", [email protected]);
$insert->bindValue("point", 60);
$insert->bindValue("regdate", $time); */
// 第二种绑定方式
/* $insert->bindParam("id", $id);
$insert->bindParam("name", $name);
$insert->bindParam("email", $email);
$insert->bindParam("point", $point);
$insert->bindParam("regdate", $regdate);
$id=null;
$name="凯撒";
$email="[email protected]";
$point=65;
$regdate=$time; */
// 第三种绑定方式
$insert->execute(array('id'=>null,'name'=>'alice','email'=>[email protected],'point'=>90,'regdate'=>$time));
$count=$insert->rowCount();
echo "<br /> 查询执行完毕!改变的行数为:".$count;
$sql=null;
>
预处理批量查询,分别采用 2 种占位符,代码如下:
<?php
header('Content-Type:text/html; charset=utf-8');
require 'config.php';
$DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
$sql="INSERT INTO grade (id,name,email,point,regdate) VALUE (:id, :name, :email, :point, :regdate)";
$rs=$DB->prepare($sql);
$time=date('Y-m-d H:i:s',time()+(8*60*60));
$rs->bindParam('id', $id);
$rs->bindParam('name', $name);
$rs->bindParam('email', $email);
$rs->bindParam('point', $point);
$rs->bindParam('regdate', $regdate);
$id=null;
$name='爱莉丝';
[email protected];
$point=81;
$regdate=$time;
$rs->execute();
$id=null;
$name='爱莉丝 2';
[email protected];
$point=82;
$regdate=$time;
$rs->execute();
$sql="INSERT INTO grade (id,name,email,point,regdate) VALUE (?,?,?,?,?)";
$rs=$DB->prepare($sql);
$rs->bindParam(1, $id);
$rs->bindParam(2, $name);
$rs->bindParam(3, $email);
$rs->bindParam(4, $point);
$rs->bindParam(5, $regdate);
$id=null;
$name='alice1';
[email protected];
$point=83;
$regdate=$time;
$rs->execute();
$id=null;
$name='alice2';
[email protected];
$point=84;
$regdate=$time;
$rs->execute();
echo "ok";
} catch (PDOException $e){
exit($e->getMessage()."<br />");
};
>
五、 PDO 错误处理模式和事务处理
PDO 的异常处理
先设置错误处理模式
- 1
- 、PDO::ERRMODE_SILENT
错误代码(默认)不主动报错,要用 $DB->errorInfo() 形式获取错误信息。
- 2
- 、PDO::ERRMODE_WARNING
- 主动提示传统错误信息E_WARNING.
- 3
- 、PDO::ERRMODE_EXCEPTION
PDOException 异常,相当于 PDO:: PDO::errorCode() 或 PDO::errorInfo(),结合 try{}catch(){} 输出错误,并且事务处理自动回滚。
- 主动抛出
也可以在构造函数 config.php 文件中先设置如下:
$DB=new PDO($dsn,DB_USER,DB_PASS, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
- PS:
- PDO::errorCode()
- 错误代码,返回一个数字。
- PDO::errorInfo()
- 错误信息提示,返回一个数组。
- try{}catch(){}
- 方法说明:
- 程序尝试执行try中的语句,如果正确则完全执行,若错误程序在try中立即停止,并进入catch部分执行其中代码,且自动生成一个异常对象$e(自定义)。
例如:
<?php
header('Content-Type:text/html; charset=utf-8');
require 'config.php';
// 预先设置 PDO 错误模式,
$DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//PDO 异常模式采用 try{}catch(){} 处理
try {
// 查找数据库中一个并不存在的信息 sex='male';
$sql="SELECT * FROM grade WHERE sex='male'";
$rs=$DB->prepare($sql);
$rs->execute();
while ($row=$rs->fetch(PDO::FETCH_ASSOC)){
var_dump($row);
echo "<br />";
};
} catch (PDOException $e){
// 自定义异常对象 $e
exit($e->getMessage()."<br />");
};
>
常规的错误处理,代码如下:
<?php
header('Content-Type:text/html; charset=utf-8');
require 'config.php';
// 查找数据库中一个并不存在的信息 sex='male';
$sql="SELECT * FROM grade WHERE sex='male'";
//rs=$DB->query($sql);
$result=$DB->prepare($sql);
$rs=$result->execute();
if ($rs===false){
//$err=$rs->errorInfo();
$err=$result->errorInfo();
echo "错误信息:".$err[2];
}else {
while ($row=$rs->fetch(PDO::FETCH_ASSOC)){
var_dump($row);
echo "<br />";
};
};
>
PDO 的事务处理机制
事务支持四大特性(ACID):
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)
以下手册中的文字说明:
通俗地讲,在一个事务中执行的任何操作,即使是分阶段执行的,也能保证安全地应用于数据库,并在提交时不会受到来自其他连接的干扰。
事务操作也可以根据请求自动撤销(假设还没有提交),这使得在脚本中处理错误更加容易。
事务通常是通过把一批更改 "积蓄" 起来然后使之同时生效而实现的;这样做的好处是可以大大地提供这些更改的效率。
换句话说,事务可以使脚本更快,而且可能更健壮(不过需要正确地使用事务才能获得这样的好处)。
不幸的是,并非每种数据库都支持事务,因此当第一次打开连接时,PDO 需要在所谓的 "自动提交" 模式下运行。
自动提交模式意味着,如果数据库支持,运行的每个查询都有它自己的隐式事务,如果数据库不支持事务,则没有。
如果需要一个事务,则必须用 PDO::beginTransaction() 方法来启动。如果底层驱动不支持事务,则抛出一个 PDOException 异常(不管错误处理设置是怎样的,这都是一个严重的错误状态)。
一旦开始了事务,可用 PDO::commit() 或 PDO::rollBack() 来完成,这取决于事务中的代码是否运行成功。
PS: beginTransaction() 启动一个事务
commit() 提交一个事务
rollBack()回滚一个事务
举例说明:在学员表 grade 中查找有没有 "丽莎" 这个名字, 然后在她的成绩中加 10 分.
<?php
header('Content-Type:text/html; charset=utf-8');
require 'config.php';
// 错误处理模式
$DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 事务处理
try {
// 关闭自动提交
$DB->setAttribute(PDO::ATTR_AUTOCOMMIT, 0);
// 开启事务
$DB->beginTransaction();
$sql="SELECT point FROM grade WHERE name = :name";
$rs=$DB->prepare($sql);
$name='丽莎';
$rs->bindParam("name", $name);
$rs->execute();
$row=$rs->fetch(PDO::FETCH_NUM);
if (!$row){
throw new PDOException('没有'.$name.'这个人');
}else {
echo "信息提示: 这位".$name."同学已经加分了";
};
$point=$row[0]+10;
$add="UPDATE grade SET point=$point WHERE name= :name";
$rs2=$DB->prepare($add);
$rs2->bindParam('name', $name);
$rs2->execute();
$count=$rs2->rowCount();
echo "<br />".$count;
// 提交
$DB->commit();
} catch (PDOException $err){
// 回滚, 不设置也会自动回滚
//$DB->rollBack();
exit("错误信息:".$err->getMessage());
};
>
PDO 的事务处理, 并不局限于在事务中更改,也可以发出复杂的查询来提取数据,还可以使用那些信息来构建更多的更改和查询;当事务激活时,可以保证其他人在操作进行当中无法作出更改。
六、 获取和遍历结果集
PDO 获取结果集主要有:
PDOStatement::fetch — 从结果集中获取下一行
PDOStatement::fetchAll — 返回一个包含结果集中所有行的数组
PDOStatement::fetchColumn — 从结果集中的下一行返回单独的一列。
PDOStatement::fetchObject — 获取下一行并作为一个对象返回。下一行并作为一个对象返回。
fetch() 的用法, 参数有如下几种.
PDO::FETCH_ASSOC:返回一个索引为结果集列名的数组.
PDO::FETCH_BOTH(默认):返回一个索引为结果集列名和以 0 开始的列号的数组.
PDO::FETCH_NUM:返回一个索引为以 0 开始的结果集列号的数组.
PDO::FETCH_LAZY:结合使用 PDO::FETCH_BOTH 和 PDO::FETCH_OBJ,创建供用来访问的对象变量名
PDO::FETCH_OBJ:返回一个属性名对应结果集列名的匿名对象
举例说明, 以不同的方式获取行, 代码如下:
<?php
header('Content-Type:text/html; charset=utf-8');
require 'config.php';
$DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
$DB->setAttribute(PDO::ATTR_AUTOCOMMIT, 0);
$DB->beginTransaction();
$sql="SELECT point FROM grade WHERE name = :name";
$rs=$DB->prepare($sql);
$rs->bindParam('name', $name);
$name='露西';
$rs->execute();
$row=$rs->fetch(PDO::FETCH_ASSOC);
echo "FETCH_ASSOC:---";
print_r($row);
echo "<br />";
$name='丽莎';
$rs->execute();
$row=$rs->fetch(PDO::FETCH_BOTH);
echo "FETCH_BOTH:---";
print_r($row);
echo "<br />";
// 数据库中的保存的字段有空格会导致查询失败
$name='杰克';
$rs->execute();
$row=$rs->fetch(PDO::FETCH_NUM);
echo "FETCH_NUM:---";
print_r($row);
echo "<br />";
$name='丽莎';
$rs->execute();
$row=$rs->fetch(PDO::FETCH_LAZY);
echo "FETCH_LAZY:---";
print_r($row);
echo "<br />";
$name='丽莎';
$rs->execute();
$row=$rs->fetch(PDO::FETCH_OBJ);
echo "FETCH_OBJ:---";
print_r($row);
echo "<br />";
$DB->commit();
} catch (PDOException $e){
$DB->rollBack();
exit("错误信息:".$e->getMessage());
};
>
其它的函数 fetchAll、fetchColumn、fetchObject 类似,请查手册,不再累赘!
遍历结果集的方法常用的是 while 和 foreach,代码如下;
<?php
header('Content-Type:text/html; charset=utf-8');
require 'config.php';
$DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
$DB->setAttribute(PDO::ATTR_AUTOCOMMIT, 0);
$DB->beginTransaction();
$sql="SELECT * FROM grade WHERE name = :name";
$rs=$DB->prepare($sql);
$rs->bindParam('name', $name);
$name='丽莎';
$rs->execute();
/* while ($row=$rs->fetch(PDO::FETCH_ASSOC)){
print_r($row);
}; */
// 或者用 foreach
$rrs=$rs->fetch(PDO::FETCH_ASSOC);
foreach ($rrs as $key=>$value){
echo $key."-".$value."<br />";
};
$DB->commit();
} catch (PDOException $e){
$DB->rollBack();
exit("错误信息:".$e->getMessage());
};
>
获取结果集的预处理方式
预处理 SQL 后绑定结果方式输出, 代码如下:
<?php
header('Content-Type:text/html; charset=utf-8');
require 'config.php';
$sql="SELECT id, name, email, point, regdate FROM grade";
$rs=$DB->prepare($sql);
$rs->execute();
// PDOStatement::bindColumn — 绑定一列到一个 PHP 变量
$rs->bindColumn(1, $id);
$rs->bindColumn(2, $name);
$rs->bindColumn(3, $email);
$rs->bindColumn("point", $point);
$rs->bindColumn("regdate", $regdate);
//PDOStatement::fetchColumn — 从结果集中的下一行返回单独的一列
while ($row=$rs->fetch(PDO::FETCH_COLUMN)){
//print_r($row);
echo "{$id}:{$name}:{$email}:{$point}:{$regdate}";
echo "<br />";
};
// 或者如下
/* foreach ($row as $rs){
echo $row['id'].'---'.$row['name'].'---'.$row['email'].'---'.$row['point'].'---'.$row['regdate'];
echo "<br />";
}; */
>
预处理 SQL 后绑定参数输出结果,例如查询 80 分以上的学员信息,代码如下:
<?php
header('Content-Type:text/html; charset=utf-8');
require 'config.php';
$sql="SELECT * FROM grade WHERE point> :point ";
$rs=$DB->prepare($sql);
$point=80;
$params=array(
'point'=>$point,
);
$rs->execute($params);
// $row=$rs->fetchAll(PDO::FETCH_ASSOC);
// print_r($row);
while($row=$rs->fetch(PDO::FETCH_ASSOC)){
print_r($row);
echo "<br />";
};
>
预处理方式获取数据,防止 SQL 注入,代码如下:
<?php
header('Content-Type:text/html; charset=utf-8');
require 'config.php';
$sql="SELECT * FROM grade WHERE name=?";
$rs=$DB->prepare($sql);
//$_POST['name'] 是键值对,为用户输入,PDO 自动将其用''转义.
if (!!$rs->execute(array($_POST['name']))){
while($row=$rs->fetch()){
var_dump($row);
};
};
>
七、 常用函数说明
PS: 文中大多数都已用过,少数方法的运用请参考手册
PDO 类:
PDO::beginTransaction — 启动一个事务
PDO::commit — 提交一个事务
PDO::__construct — 创建一个表示数据库连接的 PDO 实例
PDO::errorCode — 获取跟数据库句柄上一次操作相关的 SQLSTATE
PDO::errorInfo — 返回最后一次操作数据库的错误信息
PDO::exec — 执行一条 SQL 语句,并返回受影响的行数
PDO::getAttribute — 取回一个数据库连接的属性
PDO::getAvailableDrivers — 返回一个可用驱动的数组
PDO::inTransaction — 检查是否在一个事务内
PDO::lastInsertId — 返回最后插入行的 ID 或序列值
PDO::prepare — 备要执行的 SQL 语句并返回一个 PDOStatement 对象
PDO::query — 执行 SQL 语句,返回 PDOStatement 对象, 可以理解为结果集
PDO::quote — 为 SQL 语句中的字符串添加引号。
PDO::rollBack — 回滚一个事务
PDO::setAttribute — 设置属性
PDOStatement 类:
PDOStatement::bindColumn — 绑定一列到一个 PHP 变量
PDOStatement::bindParam — 绑定一个参数到指定的变量名
PDOStatement::bindValue — 把一个值绑定到一个参数
PDOStatement::closeCursor — 关闭游标,使语句能再次被执行。
PDOStatement::columnCount — 返回结果集中的列数
PDOStatement::debugDumpParams — 打印一条 SQL 预处理命令
PDOStatement::errorCode — 获取跟上一次语句句柄操作相关的 SQLSTATE
PDOStatement::errorInfo — 获取跟上一次语句句柄操作相关的扩展错误信息
PDOStatement::execute — 执行一条预处理语句
PDOStatement::fetch — 从结果集中获取下一行
PDOStatement::fetchAll — 返回一个包含结果集中所有行的数组
PDOStatement::fetchColumn — 从结果集中的下一行返回单独的一列。
PDOStatement::fetchObject — 获取下一行并作为一个对象返回。
PDOStatement::getAttribute — 检索一个语句属性
PDOStatement::getColumnMeta — 返回结果集中一列的元数据
PDOStatement::nextRowset — 在一个多行集语句句柄中推进到下一个行集
PDOStatement::rowCount — 返回受上一个 SQL 语句影响的行数
PDOStatement::setAttribute — 设置一个语句属性
PDOStatement::setFetchMode — 为语句设置默认的获取模式。
PHP PDO 操作 MYSQL
来源: http://www.bubuko.com/infodetail-2278142.html