SQL ServerPHP PDO操作MYSQL

PHP PDO操作MYSQL

读要:

1、         PHP PDO配置

2、         连mysql及怪处理

3、         query,exec用法详解

4、         先期处理prepare()用法详解

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

6、         博和遍历结果集

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() 函数来查看是否安装了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 — 为喻句设置默认的获取模式。

 

相关文章