從PHP5.0開始可使用mysql(i), 是一個面嚮對象的技術(新加功能都會以對象形式添加)php
i:表示改進,1. 功能增長了, 2,效率大大增長(之後的PHP項目改爲mysqli),3,更穩定html
mysqli使用面向對象技術,但也支持過程化的使用方式mysql
mysqli擴展中給我提供了三個類:sql
1. mysqli和鏈接有關的類數據庫
2. mysqli_result表達了對數據庫的查詢所返回的結果集。編程
3. mysqli_stmt (後面重點介紹)數組
能夠選擇過程化編程,或是選擇面向對象技術安全
mysql(i)_connect()服務器
面向對象:$mysqli = new $mysqli("localhost", "username", "password", "select_db"); //實例化對象fetch
面向過程:$mysqli = mysqli_connect("localhost", "username", "password", "select_db");
mysql(i)_select_db();
mysql(i)_query();
注:通常使用mysqli擴展就要使用面向對象的編程方式進行開發
一、mysqli處理結果集(mysqli_result)
使用select語句後,獲得的結果集的處理
1、處理記錄
屬性:mysqli_num_rows(); //返回結果集中行的數量
方法:
data_seek(); //調整結果集指針到結果集任意一行
fetch_assoc(); //從結果集中取得一行做爲關聯數組
fetch_row(); //從結果集中取得行
注:經常使用的爲上面兩個
fetch_array(); //從結果集中取得一行做爲數字數組或關聯數組
fetch_object(); //從結果集中取得當前行,並做爲對象返回。
free_result(); //釋放結果內存
2、處理字段信息
field_count; //返回最近查找的列數
current_field; //獲取結果指針的當前字段偏移量
lengths; //返回結果集中當前行的列的長度
fetch_field(); //從結果集中取得下一字段,並做爲對象返回。
fetch_fields(); //返回結果集中表明字段(列)的對象的數組,而後輸出每一個字段名稱、表格和最大長度
二、mysqli完成事務處理和一次執行多條sql語句
1、使用mysqli執行多條語句
a、就是沒有結果集(如:插入、更新、刪除等語句)
b、多條語句有結果集
2、使用mysqli完成事務處理
事務處理 (多個SQL要完成的任務看爲是一個事務)一件事(有任何一個環節出錯,都整個事務撤消, 若是都成功纔去提交)
目前只有InnoDB 支持事務 (MyISAM)
默認表都是自動提交的(autocommit)
1. 關閉自動提交
2. start事務(若是自動提交已經關閉,使用mysqli不須要開啓事務,PDO中則須要)
[start transaction:開啓事務,在mysql中輸入]
commit; //提交事務
rollback; //回滾當前事務
multi_query; //執行多條數據庫語句
3、其餘的mysqli類的中的成員使用
三、mysqli預處理類
mysqli_stmt預處理類(推薦你使用的類)
$mysqli=new mysqli("localhost", "root", "123456", "xsphpdb"); //準備好一條語句放到服務器中,插入語句 $sql="insert into shops(name, price, num, desn) values(?, ?, ?, ?)"; $stmt=$mysqli->prepare($sql); //給佔位符號每一個?號傳值(綁定參數) i:整形 d:浮點 s:字符 b:二進制 $stmt->bind_param("sdis", $name, $price, $num, $desn); $name="zhangsan"; $price=56.78; $num=66; $desn="hello good"; //執行 $stmt->execute(); $stmt->close();
和mysqli和mysqli_result相比優勢:
1. mysqli和mysqli_result參完成的功能,均可以使用mysqli_stmt完成
2. 效率上:高, 就是若是執行屢次相同的語句,只有語句數據不一樣, 由於將一條語句在服務器端準備好,而後將不一樣的值傳給服務器,再讓這條語句執行
編譯一次,使用屢次
3. 安全上:SQL注入(? 佔位) ,後期傳的值不會當成SQL語句