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){} 取出每一個數據