PDO

1.单例模式

单例模式是一种设计类结构的固有写法,能够保证类在全局有且仅有唯一的一个实例对象。

<?php

       echo"<pre>";

       class richestMan{

           private static $richestPeople=null;

           public  static  function  findRichestMan(){

                         if(self::$richestPeople==null){

                                  self::$richestPeople=new self();

           }

              return self::$richestPeople:

             }

         }

          $richman1=richestMan::findRichestMan();

          $richman2=richesMan:;findRichestMna();

          var_dump($richman1);

           echo"<br/>";

           var_dump($richman2);
    echo "<br/>";

        //$con例子

          class  singletonCon{

                      private   static  $con =null;

                      public    static  function getCon(){

                                          if (self::$con==null){

                                                      self::$con=mysqli_connect("localhost" ,"root","");

                                        }  

                                       return self::$con;

                         }

                 }

                      $con =singletonCon::getCon();

                      var_dump($con);


2.pdo(php data object)

 $pod=new PDO("mysql:host=localhost ;  dbname=stud ","root","");

try chath

描述:因为pdo并不能保证每一次的连接都是成功的。所以在db连接的时候需要添加一个保险操作
  这就是异常捕获【try...catch】机制
语法:try{
  //你觉得有可能出现异常问题的代码
  }catch(PDOException $err){
  echo '出现错误';
  echo $err->getMessage();
  }
说明:try中的代码如果没有发生异常错误,那么catch中的内容等价于不存在
  而如果try中的代码真的发生了异常,那么程序会立即执行catch中的内容
  而不至于在try中的异常位置卡死。


                
try {
$pdo = new PDO("mysql:host=localhost;dbname=studbd","root","");
} catch (Exception $e) {
echo '出现错误'."<br/>";
echo $e->getMessage();
}
// print_r($pdo);

(1).设计一个单例pdo类,保证在全局中获取pdo对象的时候

  永远都只获取唯一的一个pdo,而不会每次获取pdo都重新链接一次数据库。

(2)设计一个单例编写单例类,并通过require或require_once来进行引入

     保证全局中代码只需要编写一份,不用重复书写。

<?php

       echo"<pre>";

           class  singletonPDO{

                    private static $pdo=null;

                    public static function getPdo(){

                                    if(self::$pdo==null){

                                        try{

                                                  self::$pdo=new PDO("mysql:host=localhost; dbname=studb","root","");

                                  } catch (Exception $e){

                                                  echo "出现错误:","<br/>";

                                                  echo  $e->getMessage();

                                 }

                       }

                            return self::$pdo;

                 }

       }

              //以上相当于这个require_once"singletonPDO.php";

                   $pdo1=singletonPDO::getPdo();

                   $pdo2 = singletonPDO::getPdo();
          $pdo3 = singletonPDO::getPdo();


            print_r($pdo1);

            echo "<br/>";

            print_r($pdo2);

                    echo "<br/>";
            print_r($pdo3);
?>


// $pdo -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
// $pdo -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

<?php

           try{

                 $pdo =new PDO ("mysql:host=localhost; dbname=studb","root","");

                // $pdo -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
// $pdo -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

            }catch(Exception $e){

                            echo"发生错误";

                             echo $e->get Message();

            }

            $pdo->exe("set  names utf8");

            $sql="insert  into stud  values('zeo','famale','18','12233333','90');

              if($pdo->exec($sql)){

                         echo"添加成功";

              }else{

                       echo $pdo-> errorCode();

   }

  3.$pdo->exe();

   描述:pdo对象的执行法,相当于mysql原生操作中的query()方法。

                  // echo "<pre>";
// $con = mysqli_connect('localhost','root','','studb');
// if($con){
// mysqli_query($con, 'set names utf8');
// mysqli_query($con, 'set character_set_client=utf8');
// mysqli_query($con, 'set character_set_results=utf8');
// //
// $sql = 'select * from gradeonesheet where 1';
// $result = $con->query($sql);


// print_r($result);

// }


                 require_once 'singletonPDO.php';
        $pdo = singletonPDO::getPdo();
        $pdo->exec('set names utf8');

//

        // $sql="inert int stud values('joy','male','14','334343434',''99');

        //$sql="update stud set stuScore='99' where stuName='joy'";

        $sql = "delete from stud  where stuName='joy'";

          $result=$pdo->exec($sql);

          if($result){

                        echo"删除数据成功";

                }else{

                        echo"删除数据失败";

                }


 4,.pdo 预处理指令prepare

 描述:预处理指令是指用来在sql语句执行之前,对sql语句进行简短操作的指令

             其目的是为了更好的让sql 完成任务。

       说明:
(1)prepare()方法和execute()方法
(2)bindValue()方法
(3)bindColumn()方法


(1)prepare()方法和execute()方法    

                 prepare()方法表示预先出来,用来处理半成品的sql语句

                 execute()方法提供给预处理结果使用,用来执行并获得最终的结果

    语法:        $sql ="insert int stud values(?,?,?,?,?);

                      $pdoso=$pdo->prepare($sql);

                      $pdoso->execute(array('实参1',实参2','实参3','实参4','实参5'));

        

   说明:(1)prepare()方法只能处理半成品sql语句,如果sql语句是完整的则不能处理

                完整的sql语句需要使用exec()方法执行

               (2)execute()方法必须由半成品来调用,其目的是为了给半成品传参,

                       从而使半成品变成成品。

               (3)execute()方法接收数组作为参数,数组内容一般和半成品sql语句中问号格式对应

           补充:$pdoso 在执行了execute()方法后会将一些信息存放到自己内部,然而这部分信息不可见

                            

例子:

         require_once"singletonPDO.php";

        $pdo= singletonPDO::getPdo();

        $pdo->exec('set names utf8');

        $sql = "insert into gradeonesheet values('polly','male','11','12345678998','80')";

$pdo->exec($sql)

        $sql = "insert into gradeonesheet values(?,?,?,?,?)";
$pdoso = $pdo->prepare($sql);
$result = $pdoso->execute(array('polly','male','11','12345678998','80'));

        var_dump($result);


       5.bindColumn()

        描述:将execute()方法执行的结果中的某一列数据,绑定到一个变量之上

        语法:

                $pdoso->execute();

                $pdoso->bindColumn(omdex,$变量名);

        说明:

                $pdoso 对象在执行execute()完毕后,就从半成品的身份,变成了成品的身份

                 即包含了结果所需要的内容


                 require_once"singletonPDO.php";

                 $pdo=singletonPDO::getPdo();

                  $pdo->exec('set names utf8’);

                  $sql='select*from gradeonesheet where1';

                  $pdoso->execute();

                  $pdoso->bindColum(1,$stuName);

                   $pdoso->bindColumn(2,$stuGender);
            $pdoso->bindColumn(3,$stuAge);
            $pdoso->bindColumn(4,$stuNumber);
            $pdoso->bindColumn(5,$stuScore);

//

                     $info=[];

                      $i=0;

                       while($row=$pdoso->fetch(PDO::FETCH_COLUMN)){

                                 $arr=[$stuName,$stuGender,$stuAge,$stuName,$sthScore];

                                 $info[$i]=$arr;

                                  $i++;

                                   //echo "$stuName".'---'."$stuGender".'---'."$stuAge".'---'."$stuNumber".'---'."$stuScore"."                                                      <br/>";
                             }
                                      echo "<pre>";
                            //  $info = [];
                            //    for($i=0; $pdoso->fetch(PDO::FETCH_COLUMN); $i++){
                            //$info[$i] = array($stuName, $stuGender, $stuAge, $stuName, $stuScore);
                           //    }
                              //   echo "<pre>";
                              //  print_r($info);      print_r($info);

                          //


5.事物处理transaction

描述:

      require_once "singletonPDO.php";

      $pdo= singletonPDO::getPdo();

      $pdo->exec('set names utf8');

      $pdo->query('set names  utf8');

       try{

            //try中所有的execute()事件都必须在事物开启命令之后执行

           $pdo-> beginTransaction();

           //事务只要开启了,那么接下来该做什么做什么,不受影响

            $sql="update stud set stuScore=? where stuName=?";

           $pdoso=$pdo->prepare($sql);

            //第一次执行

            $pdoso->execute(array('200',frank'));

            //第二次执行

            $pdoso->execute(array('200','123'));

              // $pdoso->execute(array('100','frank'));

     // $pdoso->execute(array('99','amy'));

             //结束事务,通过commit()方法来将所有的修改确认提交

             echo$pdo->commit();

              }catch(Exception  $e){

                 //不管try 中哪一个excute事件发生错误,都将所有事务中之前对数据库所做的修改还原

                //回归到事务开始之前的装填

                 $pdo->rollBack();

                  echo'’事务处理失败,数据库回滚成功,没有受到任何影响‘;

            }






    




?>

 








?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值