澳门新葡萄京官网注册PHP PDO操作MYSQL

SQL注入是网络攻击的一种经常见到手腕,攻击者通过对页面中的SQL语句举行拼组来获得管理账号、密码及愈来愈多的此外音讯。这种攻击方式对于网址的妨害是比很大的。SQL注入攻击的相近方法

PHP PDO操作MYSQL

以下代码是多少个大约的多寡输出页面,该页面通过从浏览器地址栏获得参数来呈现相应的内容。?php
$id = $_GET[”id”];//取得参数 $sql = SELECT * FROM posts WHERE
postid = $id; //定义SQL mysql_connect(localhost, root卡塔尔(قطر‎;//连接服务器
mysql_select_db(guestbook卡塔尔(قطر‎;//连接数据库 $rs =
mysql_query($sql);//执行SQL
if(mysql_numrows($rs卡塔尔国卡塔尔(قطر‎//假诺记录存在,则输出 { $row_rs =
mysql_fetch_assoc($rs); echo TOPIC: .$row_rs[”topic”].br; }
else&nbsp

学学要点:

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(State of Qatar函数来查阅是不是成功安装了PDO扩充

 

二、       延续mysql及特别管理

测量试验数据:

创办一个班级数据库school,里面含有一张班级表grade,富含编号(id卡塔尔(قطر‎、姓名(nameState of Qatar、邮件(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(State of Qatar来刑满释放解除劳教数据库财富与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中搜寻有未有”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(卡塔尔(قطر‎State of Qatar;

    };

?>

其余的函数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 — 为语句设置默许的获取情势。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注