PDO面向对象操作数据库服务器

1、PDO是PHP新版中推荐的基于面向对象操作数据库服务器的方式。
开启PDO_mysql相关扩展:在php.ini中修改extension=php_pdo_mysql.dll
重启apache
2、PDO操作数据库的基本使用步骤
连接,认证,发送SQL,等待mysql服务器的执行结果,处理执行结果
3、pdo操作数据库的代码:
<?php
    //实例化PDO对象
    $dsn=‘mysql:host=localhost;port=3306;dbname=php34‘;
    $username=‘root‘;
    $password=‘123456‘;
    //$driver_options 驱动选项,对应当前数据库服务器一些特定的初始化工作
    $driver_options=array(
           PDO::MYSQL_ATTR_INIT_COMMAND=>‘SET NAMES UTF8‘,
     );
     $pdo=new PDO($dsn,$username,$password,$driver_options);
    //***** var_dump($pdo);  //测试打印PDO是一个对象类型
     //发送SQL到服务器等待执行SQL的结果,用pdo对象方法query(SQL)完成执行SQL
     $sql="show databases";
     $result=$pdo->query($sql);
     //*****var_dump($result);  //打印结果object(PDOStatement)#2 (1) { ["queryString"]=> string(14) "show databases" }
     //*****逻辑上,返回的是结果集,被PDOStatememt类对象封装管理
     //*****PDOStatement类,称之为PDO语句对象,SQL执行完(处理完)产生的结果对象
     //利用该结果对象,获得我们需要的数据
     /*
     $list=$result->fetchAll();
     var_dump($list);  //默认返回关联和索引的集合,可以传递参数,进行配置
     */
        //$list=$result->fetchAll(PDO::FETCH_ASSOC);
        $list=$result->fetchAll(PDO::FETCH_NUM);
       //var_dump($list);

//PDO对象的常用方法
        // errorInfo()   错误信息,包含错误信息的数组
        //errorCode()  错误代码
//处理错误信息
         if(!$result=$pdo->query($sql)){
           var_dump($pdo->errorInfo());
           echo "<br/>";
           var_dump($pdo->errorCode());
         }

4、开启事务:   beginTransaction();
   回滚事务:   rollback();
   提交事务:   commit();
   判断是否处于事务中: inTransaction();
5、最后形成的auto_increment字段的值:lastInsertID()
6、Exec()
又一个执行SQL的方法。
区别于query(),返回值类型不同。Exec()返回值类型为整型。(query()返回的是对象类型)。
该返回的整数,表示当前执行SQL所影响的记录数。
可见:
 Query(), 执行查询类,show,select,desc
 Exec(), 非查询类,insert,delete,update,DDL
注意:影响的记录数可能为0.但是不意味着执行失败
7、项目中对PDO的使用
使用PDO,实现与mysqlDB这个DAO对象外部操作一致的另外一种DAO的实现,可以做到,模型切换DAO,是不需要更改模型内的任何代码(热插拔,无缝切换)。

增加DAO的操作接口(I_DAO),使所有DAO的定义(mysql扩展,PDO扩展)都实现相同的DAO操作接口(I_DAO)
//DAO层操作接口
interface I_DAO{
    public function getInstance($config);
    public function query($sql);
    public function getAll();
    public function gerRow();
    public function getOne();
    public function escapeString();
}
class PDODB implements I_DAO{

}
class MySQLDB implements I_DAO{

}

8、预处理(预编译)的执行方式
一条SQL的执行,MySQL分成两大步骤:
①,编译;②,执行

如果:
连续执行多条结构相同的SQL:
编译的中间结果(语法树)应该是一致的。
应该将相同的结构,统一编译,每次使用不同的数据执行即可!
预编译:指的是预先编译SQL的结构的一种执行SQL的方法

9、编译统一的结构
$PDOStatement = $pdo->prepare(SQL的结构);

SQL结构中的数据部分,可以使用问好,或者冒号标签的语法来占用
$sql1="insert into team values(null,?)";
$sql2="insert into team values(null,:team_name)";
$stmt=$pdo->prepare($sql);

10、绑定数据到中间编译结果,语法:$PDOStatement->bindValue()
$stmt->bindValue(‘:team_name‘,‘球队‘);

11、执行  语法形式: $PDOStatement->execute();
$result=$stmt->execute();

12、预编译的优点:
更好的防止SQL注入,是因为预编译时,不需要用户的数据参与。编译时,结构固定,导致用户数据不能影响到SQL的结构。

普通的执行方法:
$pdo->query();
$pdo->exec()
如果需要防止SQL注入,需要人为的转义用户数据,使用的方式是$pdo->quote()方法。转义并使用引号包裹。

13、PDOStatement对象的常用方法
errorInfo()
errorCode()
使用PDOStatement->execute()方法执行失败时,错误信息由以上两个方法获得。

fetchColumn(index=0)
允许传递参数,表示获得第一条记录的第几个字段的值。
getOne()
Fetch()
getRow()
获取一条后,可以向后移动结果集指针。
FetchAll()
getAll()

rowCount();
统计处理的记录数:
 影响了多少行(增删改)
 结果集中存在多少行(查)。

closeCursor();
释放结果集光标。(建议fetch之后,手动释放)

14、数据据抽象层&驱动
PDO:PHP Data Object。
PDO是数据库抽象层的一种。
将多种数据库的操作,抽象出来,使用同一种语法完成。


示例代码:

<?php
    //实例化PDO对象
    $dsn=‘mysql:host=localhost;port=3306;dbname=php34‘;
    $username=‘root‘;
    $password=‘123456‘;
    //$driver_options 驱动选项,对应当前数据库服务器一些特定的初始化工作
    $driver_options=array(
           PDO::MYSQL_ATTR_INIT_COMMAND=>‘SET NAMES UTF8‘,
     );
     $pdo=new PDO($dsn,$username,$password,$driver_options);
    //***** var_dump($pdo);  //测试打印PDO是一个对象类型
     //发送SQL到服务器等待执行SQL的结果,用pdo对象方法query(SQL)完成执行SQL
     $sql="show databases";
     $result=$pdo->query($sql);
     //*****var_dump($result);  //打印结果object(PDOStatement)#2 (1) { ["queryString"]=> string(14) "show databases" }
     //*****逻辑上,返回的是结果集,被PDOStatememt类对象封装管理
     //*****PDOStatement类,称之为PDO语句对象,SQL执行完(处理完)产生的结果对象
     //利用该结果对象,获得我们需要的数据
     /*
     $list=$result->fetchAll();
     var_dump($list);  //默认返回关联和索引的集合,可以传递参数,进行配置
     */
        //$list=$result->fetchAll(PDO::FETCH_ASSOC);
        $list=$result->fetchAll(PDO::FETCH_NUM);
       //var_dump($list);

//PDO对象的常用方法
        // errorInfo()   错误信息,包含错误信息的数组
        //errorCode()  错误代码
//处理错误信息
         if(!$result=$pdo->query($sql)){
           var_dump($pdo->errorInfo());
           echo "<br/>";
           var_dump($pdo->errorCode());
         }

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。