PHP mysqli 擴充庫(物件導向/資料庫操作封裝/事務控制/先行編譯)

來源:互聯網
上載者:User

標籤:

1、和mysql擴充庫的區別:

     (1   安全性、穩定性更高

     (2  提供了物件導向和面向過程兩種風格

 

2、php.ini  中的  extension=php_mysqli.dll 解除封印

3、物件導向:查詢列表

 
 1 <?php 2  3   //mysqli 操作資料(物件導向風格) 4    5   #1、建立Mysql對象 6    7   $mysqli=new MySQLi("127.0.0.1","root","daomul","test"); 8   if(!$mysqli) 9   {10        die("串連失敗!".$mysqli->connect_error);11   }12   13   #2、操作資料庫14   15   $sql="select * from user1";16   $res=$mysqli->query($sql);17   #3、處理結果18   19   while($row=$res->fetch_row())20   {21       foreach($row as $key=> $val)22       {23           echo "-- $val";24       }25       echo "<br/>";26   }27   #4、關閉資源28   $res->free();//釋放記憶體29   $mysqli->close();//關閉串連30   31 ?>

4、物件導向:封裝類後實現

  4.1 Sqliconnect.class.php 

 1 <?php 2  3    Class Sqliconnect 4    { 5         private $mysqli; 6         private static $host="127.0.0.1"; 7         private static $root="root"; 8         private static $password="daomul"; 9         private static $db="test";10         11         function __construct()12         {13              $this->mysqli=new MySQLi(self::$host,self::$root,self::$password,self::$db);14              if(!$this->mysqli)15              {16                    die("資料庫連接失敗!".$this->mysqli->connect_error);17              }18              19              $this->mysqli->query("set names utf8");20         }21         22         //查詢操作23         public function excute_dql($sql)24         {25               $res=$this->mysqli->query($sql) or die("資料查詢失敗".$this->mysqli->error);26               return $res;27               28         }29         30         //增刪改操作31         public function excute_dml($sql)32         {33               $res=$this->mysqli->query($sql) or die("資料操作失敗".$this->mysqli->error);34               if(!$res)35               {36                    echo "資料操作失敗";37               }38               else39               {40                    if($this->mysqli->affected_rows>0)41                    {42                          echo "操作成功!";43                    }44                    else45                    {46                         echo "0行資料受影響!";47                    }48               }49         }50         51    }52 ?>
 

  4.2 調用頁面startsqli.php

 
 1 <?php 2  3   //mysqli 操作資料(物件導向風格) 4    5    6   require_once "Sqliconnect.class.php"; 7    8   $Sqliconnect=new Sqliconnect(); 9   10   //$sql="insert into user1(name,password,email,age) values(‘帝都‘,md5(‘gg‘),‘[email protected]‘,23)";11   //$sql="delete from user1 where id=11";12   //$res=$Sqliconnect->excute_dml($sql);13   14   $sql="select name from user1;";15   $res=$Sqliconnect->excute_dql($sql);16   while($row=$)17   18   $res->free();19 ?>
 

 

5、同時執行多條資料庫語句 multiQuery.php

 
 1 <?php 2  3   //mysqli 操作資料(物件導向風格) 4    5   #1、建立Mysql對象 6    7   $mysqli=new MySQLi("127.0.0.1","root","daomul","test"); 8   if(!$mysqli) 9   {10        die("串連失敗!".$mysqli->connect_error);11   }12   13   #2、操作資料庫14   15   $sqls="select * from user1;";16   $sqls.="select * from user1";17   18   #3、處理結果19   20   if($res=$mysqli->multi_query($sqls))21   {22        echo "211";23      do 24      {25           //從mysqli連續取出第一個結果集26           $result=$mysqli->store_result();27           28           //顯示mysqli result對象29           while($row=$result->fetch_row())30           {31             foreach($row as $key=> $val)32             {33                 echo "-- $val";34             }35            echo "<br/>";36          }37          38        $result->free();//及時釋放當前結果集,並進入下一結果集39          40          //判斷是否有下一個結果集41          if(!$mysqli->more_results())42          {43            break;44          }45        echo "<br/>************新的結果集**************";46        47      }while($mysqli->next_result());48  }49  50   #4、關閉資源51   $mysqli->close();//關閉串連  52   53   54 ?>
 

 

6、事務控制

 
 1 <?php 2  3   //mysqli 操作資料(物件導向風格) 4    5   6    // 資料庫 :create table account(id int primary key,balance float); 7     8   $mysqli=new MySQLi("127.0.0.1","root","daomul","test"); 9   if(!$mysqli)10   {11        die("資料庫連接失敗!".$mysqli->connect_error);12   }13   //將提交設為false14   $mysqli->autocommit(false);15   16   $sql1="update account set balance=balance+1 where id=1;";//沒錯的語句17   $sql2="update accounterror2 set balance=balance-1 where id=2";//有錯的語句18   19   $res1=$mysqli->query($sql1);20   $res2=$mysqli->query($sql2);21   22   if(!$res1||!$res2)23   {24       //復原:其中一個不成功即復原不提交25        echo "有錯,復原,請重新提交!";26        $mysqli->rollback();//die("操作失敗!".$mysqli->error);27   }28   else29   {30       //所有均成功則提交31        echo "所有提交成功!";32        $mysqli->commit();33   }34   35   $mysqli->close();36   /* 37     1、 start transaction; 開啟事務38     2、svaepoint a;    做儲存點39     3、執行操作1; 40     4、 svaepoint b;41     5、執行操作2;42     ...43     6、rollback to a/b; 復原或者是提交44     7、commit 45     46     事務控制特點acid  原子性/一致性/隔離性/持久性47    */48 ?>
 

7、預先處理技術

  主要在串連和編譯過程精簡,還可以SQL防止注入

 7.1 先行編譯插入多個資料

 

 
 1 <?php 2  3   //mysqli 先行編譯示範 4    5   #1、建立mysqli對象 6   $mysqli=new MySQLi("127.0.0.1","root","daomul","test"); 7   if(!$mysqli) 8   { 9        die("資料庫連接失敗!".$mysqli->connect_error);10   }11   12   #2、建立先行編譯對象13   $sql="insert into user1(name,password,email,age) values(?,?,?,?);";//暫時不賦值,用問號代替14   $stmt=$mysqli->prepare($sql) or die($mysqli->error);15  16   /********************************可重複執行時需要的代碼start*********************************/17   #3、綁定參數18   $name=‘小明5‘;19   $password=‘34f‘;20   $email=‘[email protected]‘;21   $age=‘1‘;22   23   #4、參數賦值(第一個參數指代參數的類型縮寫,string-s,int-i,double-d,bool-b24   $stmt->bind_param("sssi",$name,$password,$email,$age);25   26   #5、執行代碼(返回布爾類型)27   $flag=$stmt->execute();28   29  /********************************可重複執行時需要的代碼 end************************************/30   31   #6、結果以及釋放32   33   if(!$flag)34   {35       die("操作失敗".$stmt->error);36   }37   else38   {39       echo "操作成功!";40   }41   42   $mysqli->close();43   44  45 ?>
 

  7.2 先行編譯查詢多個資料

 
 1 <?php 2  3   //mysqli 先行編譯示範 4    5   #1、建立mysqli對象 6   $mysqli=new MySQLi("127.0.0.1","root","daomul","test"); 7   if(!$mysqli) 8   { 9        die("資料庫連接失敗!".$mysqli->connect_error);10   }11   12    /********************************可重複執行時需要的代碼 start*******************************/13  14   #2、建立先行編譯對象15   $sql="select id,name,email from user1 where id>?;";//id,name,email和後面的結果集bind_result()對應16   $stmt=$mysqli->prepare($sql) or die($mysqli->error);17  18   #3、綁定參數19   $id=5;20   21   #4、參數賦值(第一個參數指代參數的類型縮寫,string-s,int-i,double-d,bool-b22   $stmt->bind_param("i",$id);//綁定參數23   $stmt->bind_result($id,$name,$email);//綁定結果集24   25   #5、執行代碼(返回布爾類型)26   $stmt->execute();27   28   #6、取出結果集顯示29   while($stmt->fetch())30   {31       echo "<br/>$id--$name--$email";32   }33   34   /********************************可重複執行時需要的代碼 end*******************************/35   36   #7、結果以及釋放37   38   //釋放結果39   $stmt->free_result();40   //關閉先行編譯語句41   $stmt->close();42   //關閉資料庫連接43   $mysqli->close();44   45  46 ?>
 

 

8、其他函數

    (1  擷取行數和列數  num_rows   field_count

    (2  擷取結果集的一列 :表頭 例如

              $result=$mysqli->query();

              $result->fetch_field();

    (3 取出資料

             $row=$result->fetch_row(); //獲得每一行資料

             再通過 foreach($row as $val){} 取出每一個資料

PHP mysqli 擴充庫(物件導向/資料庫操作封裝/事務控制/先行編譯)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.