程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP mysqli 擴展庫(面向對象/數據庫操作封裝/事務控制/預編譯),mysqli面向對象

PHP mysqli 擴展庫(面向對象/數據庫操作封裝/事務控制/預編譯),mysqli面向對象

編輯:關於PHP編程

PHP mysqli 擴展庫(面向對象/數據庫操作封裝/事務控制/預編譯),mysqli面向對象


 

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               else
39               {
40                    if($this->mysqli->affected_rows>0)
41                    {
42                          echo "操作成功!";
43                    }
44                    else
45                    {
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   //將提交設為false
14   $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   else
29   {
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-b
24   $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   else
38   {
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-b
22   $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){} 取出每一個數據

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved