澳门新葡亰娱乐官网PHP5.2中PDO的简单使用

1、确定保证PHP版本为5.2.5以上2、在php.ini中找到Dynamic
Extensions扩张部分,去掉extension=php_pdo.dll前边的支行3、去掉相应数据库PDO扩大后边的分店,如:extension=php_pdo_mysql.dllCREATE
TABLE tablename ( id mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT, str
varchar(50) NOT NULL DEFAULT ””, PRIMARY KEY (id));?php/**
数据库配置新闻*/$dsn = mysql:host=localhost;dbname=test;$user =
”root”;$passwd = ”123456”;/**
链接数据库,并测量检验是不是链接成功*/try{ $db = new PDO($dsn, $user,
$passwd卡塔尔;}catch (PDOException $eState of Qatar{ echo 链接数据库战败!; print
相当音讯: . $e-getMessage(State of Qatar . br/; print 卓殊文件: . $e-getFile(卡塔尔 . br/;
print 非常行号: . $e-getLine(卡塔尔国 . br/; exit(卡塔尔;}/** 插入*///$sql =
INSERT INTO tablename SET str = ”Hello”;//$count = $db-exec($sql卡塔尔;
//重返值为影响的行数/** 删除*///$sql = DELETE FROM tablename WHERE
str = ”Hello” LIMIT 1;//$count = $db-exec($sql卡塔尔;
//重临值为影响的行数/**
查询*///预管理供给查询的SQL语句//$db-setAttribute(PDO::ATTLAND_CASE,
PDO::CASE_NATURAL卡塔尔国; //列名依据原有的主意$sql = SELECT * FROM tablename
WHERE id :id AND str = :string; //sql语句$query = $db-prepare($sql卡塔尔(قطر‎;
//预管理//用一组绑定参数执行一遍查询$query-execute(array(”:id”=1,
”:string”=”Hello”卡塔尔国卡塔尔国;
//管理语句//$query-setFetchMode(PDO::FETCH_ASSOC卡塔尔;
关联数组情势while($item =

PHP PDO操作MYSQL

【PDO配置】
1、确定保障PHP版本为5.2.5之上(首就算本人用的5.2.5,第贰遍不精晓用的5.1.x的,结果一向搞倒霉~_~)
2、在php.ini中找到Dynamic
Extensions扩展部分,去掉extension=php_pdo.dll前边的支行
3、去掉相应数据库PDO扩张前边的总部,如:extension=php_pdo_mysql.dll

读书要点:

【范例中数据库】
CREATE TABLE tablename (
    id mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT,
    str varchar(50) NOT NULL DEFAULT ””,
    PRIMARY KEY (id)
);

1、         PHP PDO配置

【程序典范】
<?php
/*
*        数据库配置音讯
*/
$dsn = “mysql:host=localhost;dbname=test”;
$user = ”root”;
$passwd = ”123456”;

2、         连接mysql及特别管理

/*
*        链接数据库,并测量检验是还是不是链接成功
*/
try{
        $db = new PDO($dsn, $user, $passwd);
}catch (PDOException $e)
{
        echo “链接数据库退步!”;
        print “分外新闻: “. $e->getMessage(卡塔尔 . “<br/>”;
        print “极度文件: ” . $e->getFile(卡塔尔国 . “<br/>”;
        print “分外行号: ” . $e->getLine(State of Qatar . “<br/>”;
        exit();
}

3、         query,exec用法详整

/*
*        插入
*/
//$sql = “INSERT INTO tablename SET str = ”Hello””;
//$count = $db->exec($sql卡塔尔(قطر‎; //重返值为影响的行数

4、         预管理prepare(卡塔尔用法详整

/*
*        删除
*澳门新葡亰娱乐官网 ,/
//$sql = “DELETE FROM tablename WHERE str = ”Hello” LIMIT 1″;
//$count = $db->exec($sql卡塔尔; //再次来到值为影响的行数

5、         PDO错误管理情势和事务管理

/*
*        查询
*/
//预管理必要查询的SQL语句
//$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_NATURAL卡塔尔(قطر‎;
//列名依据原本的艺术(字段)
$sql = “SELECT * FROM tablename WHERE id < :id AND str = :string”;
//sql语句(参数绑定格局)
$query = $db->prepare($sql); //预处理

6、         收获和遍历结果集

//用一组绑定参数实践三回查询
$query->execute(array(”:id”=>1, ”:string”=>”Hello”卡塔尔(قطر‎卡塔尔国;
//处理语句(参数绑定形式)
//$query->setFetchMode(PDO::FETCH_ASSOC卡塔尔;
关联数组方式(只经过字段名下标访谈数组内容)
while($item =

7、         常用函数表明

 

自身的博客:

 

一、       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(State of Qatar 函数来查看是不是安装了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,满含编号(idState of Qatar、姓名(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(State of Qatar将会报non-object错误。

唯有大家调用
PDOStatement::closeCursor(卡塔尔国来刑满释放解除劳教数据库财富与PDOStatement对象。

 

而是笔者在地头测量检验的时候,未有采纳closeCursor(State of Qatar只怕null(State of Qatar,未产生频仍用到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($queryState of Qatar;//不得到结果集

//     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(State of Qatar 用法详明

正如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(State of Qatar;//重返管理过多少行数

      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(State of Qatar{}输出错误,并且事务管理自动回滚。

也得以在布局函数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中查找有未有”Lisa”那一个名字,然后在她的战表中加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(State of Qatar的用法,参数宛如下两种.

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(State of Qatar卡塔尔(قطر‎;

    };

?>

 

赢得结果集的预管理方式

 

预管理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 — 为语句设置默许的获得情势。

 

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图