PHP PDO操作MYSQL
2018-06-22 05:27:05来源:未知 阅读 ()
PHP PDO操作MYSQL
学习要点:
1、 PHP PDO配置
2、 连接mysql及异常处理
3、 query,exec用法详解
4、 预处理prepare()用法详解
5、 PDO错误处理模式和事务处理
6、 获取和遍历结果集
7、 常用函数说明
我的博客:
一、 PDO配置
PHP 数据对象 (PDO) 扩展可以支持绝大多数的主流的数据库,如下
- Cubrid
- FreeTDS / Microsoft SQL Server / Sybase
- Firebird/Interbase 6
- IBM DB2
- IBM Informix Dynamic Server
- MySQL 3.x/4.x/5.x
- Oracle Call Interface
- ODBC v3 (IBM DB2, unixODBC and win32 ODBC)
- PostgreSQL
- SQLite 3 及 SQLite 2
- Microsoft SQL Server / SQL Azure
- 4D
它为多种数据库的查询和获取数据,提供了一个统一的接口(数据抽象层),可以用相同的函数(方法)去实现编程要求,并且不会为数据库的迁移重写。
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','zend@gmail.com',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 ('爱莉斯','alice@unitbuy.com','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,'爱莉斯','alice@gmail.com','95',NOW())";
$insert=$DB->prepare($sql);
$insert->execute();
echo $insert->rowCount();
$sql=null;
?>
问号参数绑定方式代码如下:
<?php
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, 'alice@gmail.com');
$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='sophie@gmail.com';
$point='98';
$regdate=$time; */
//第三种绑定方式
/* $insert->execute(array(null,'凯撒','caesar@gmail.com','90',$time)); */
$insert->execute(array(null,'凯撒','caesar@gmail.com','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", 'caesar@gmail.com');
$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="caesar@e.com";
$point=65;
$regdate=$time; */
//第三种绑定方式
$insert->execute(array('id'=>null,'name'=>'alice','email'=>'alice@e.com','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='alice@e.com';
$point=81;
$regdate=$time;
$rs->execute();
$id=null;
$name='爱莉丝2';
$email='alice2@e.com';
$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='alice@ee.com';
$point=83;
$regdate=$time;
$rs->execute();
$id=null;
$name='alice2';
$email='alice@eee.com';
$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 — 为语句设置默认的获取模式。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:PHP迭代与递归实现无限级分类
下一篇:2017最新PHP面试题
- PHP写UltraEdit插件脚本实现方法 2020-03-29
- php 带逗号千位符数字的处理方法 2020-03-28
- PHP三元运算符的结合性介绍 2020-03-28
- PHP静态延迟绑定和普通静态效率的对比 2020-03-28
- 基于php流程控制语句和循环控制语句 2020-03-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash