PHP PDO操作MYSQL

学习要点:

1、        PHP PDO配置

2、        连接mysql及异常处理

3、        query,exec用法详解

4、        预处理prepare()用法详解

5、        PDO错误处理模式和事务处理

6、        获取和遍历结果集

7、        常用函数说明

 

我的博客http://phperos.blog.51cto.com/

 

  • PDO配置

PHP 数据对象 (PDO) 扩展可以支持绝大多数的主流的数据库,如下

  1. Cubrid

  2. FreeTDS / Microsoft SQL Server / Sybase

  3. Firebird/Interbase 6

  4. IBM DB2

  5. IBM Informix Dynamic Server

  6. MySQL 3.x/4.x/5.x

  7. Oracle Call Interface

  8. ODBC v3 (IBM DB2, unixODBC and win32 ODBC)

  9. PostgreSQL

  10. SQLite 3 及 SQLite 2

  11. Microsoft SQL Server / SQL Azure

  12. 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>CREATEDATABASE school;

mysql>CREATE TABLE grade (

-> idTINYINT(2) UNSIGNED NOT NULL AUTO_INCREMENT,

-> nameVARCHAR(20) NOT NULL,

-> emailVARCHAR(40),

-> pointTINYINT(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=newPDO($dsn,DB_USER,DB_PASS, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));

        $DB=newPDO($dsn,DB_USER,DB_PASS);

        $DB->exec('SET NAMESUTF8');

        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="SELECTid,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="SELECTid,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,pointFROM 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为语句设置默认的获取模式。