Mysqli擴充套件庫的總結

2021-08-02 13:28:26 字數 4244 閱讀 8022

一.mysqli概念

從php5.0開始可以使用mysqli,是乙個物件導向的技術

mysql是非持續鏈結資料庫,mysql每次鏈結都會開啟乙個鏈結的程序

mysqli是永久鏈結函式,多次執行mysqli將使用同一鏈結程序,從而減少伺服器的開銷

功能增加了,mysqli封裝了諸如事物等一些高階操作

二.mysqli擴充套件

1.使用mysqli,需要載入mysqli擴充套件庫,請確定 php.ini 開啟mysqli庫擴充套件:

extension_dir = "f:/wamp/php-5.4.45/ext"

extension=php_mysqli.dll

2.使用 extension_loaded() 函式可以檢測mysqli庫擴充套件是否開啟

bool extension_loaded('mysqli');

三.使用mysqli運算元據庫

在php指令碼中使用mysqli運算元據庫步驟如下:

連線mysql資料庫伺服器

選擇資料庫

設定字符集

準備並執行sql語句

處理結果集

釋放結果集資源

關閉資料庫連線

四.鏈結mysql,並選擇資料庫

1.方法一:

$mysqli=new mysqli("127.0.0.1:3306","root","123456","eshop");

方法二:

$mysqli=new mysqli();

$mysqli->connect("127.0.0.1:3306","root","123456");

$mysqli->select_db("eshop");

2.$mysqli->connect_errno;

返回錯誤號

如果未發生任何錯誤,connect_errno()函式將返回0

$mysqli->connect_error;

返回錯誤資訊

3.設定漢字編碼

$mysqli->set_charset("utf8");

五.執行sql語句

$mysqli->query($sql);

描述:執行sql查詢(查詢指所有sql命令的統稱)

如果sql為select、show等查詢語句,正確執行時將返回資源結果集,錯誤執行將返回false;

如果sql為insert、update、delete等操作語句時,正確執行將返回true,錯誤執行將返回false。

六.處理資源結果集

$result->num_rows

描述:返回結果集包含的記錄數目

$result->fetch_row()

描述:從結果集抽取一行作為索引陣列返回,如果沒有更多的行,則返回false

$result->fetch_assoc()

描述:從結果集抽取一行作為關聯陣列返回,如果沒有更多的行,則返回false

$result->fetch_array( mysqli_both| mysqli_assoc |mysqli_num )

描述:從結果集抽取一行作為索引陣列/關聯陣列/兩者兼有返回,如果沒有更多的行,則返回false

$result->fetch_all(mysqli_num | mysqli_assoc | mysqli_both)

描述:從結果集抽取所有記錄

七.處理非查詢語句

$mysqli->affected_rows

返回受影響記錄的行數

-1代表操作失敗

0代表沒有受影響記錄

$mysqli->insert_id

在插入記錄時,返回最後插入記錄的主鍵id

八.釋放結果集資源,關閉資料庫連線

$result->free_result()

描述:釋放結果集

$mysqli->close();

描述:關閉連線

九.mysqli_stmt預處理類

和mysqli和mysqli_result相比優點:

1. mysqli和mysqli_result完成的功能,都可以使用mysqli_stmt完成

2. 效率上:高, 就是如果執行多次相同的語句,只有語句資料不同, 因為將一條語句在伺服器端準備好,然後將不同的值傳給伺服器,再讓這條語句執行編譯一次,使用多次

3. 安全上:sql注入(? 佔位) ,後期傳的值不會當成sql語句

mysqli_stmt的處理過程

1.鏈結資料庫

$mysqli=new mysqli('主機名','使用者名稱','密碼','庫名');

例:$mysqli=new mysqli("127.0.0.1:3306",'root','123456','yhshop');

2.//設定客戶端的漢字編碼

$mysqli->set_charset("utf8");

3.sql語句準備

插入語句

$sql="insert into yhshop(欄位名,...)values(?,?,?...)";

例://準備乙個要處理的sql語句

$sql="insert into yh_admin(username,password) value(?,?)";

4.預處理物件初始化

第一種進行預處理

$stmt=$mysqli->stmt_int();

$stmt->prepare($sql);

例:$stmt=$mysqli->stmt_init();

$stmt->prepare($sql);

第二種進行預處理

$stmt=$mysqli->prepare($sql);

例:$stmt=$mysqli->prepare($sql);

mysqli中也有prepare方法,並直接返回stmt預處理物件,可以省去stmt_init()方法

5.繫結引數

$stmt->bind_param('字段型別',分別對應的?的變數名);

例:$stmt->bind_param('ss',$username,$password);

型別有i-整型,d-浮點型,s-字串,b-二進位制

6.給引數賦值

例:$username='php1';

$password=md5('123');

執行sql語句

$stmt->execute();

最後一次插入的id

$stmt->insert_id;

最後一次操作影響的行數

$stmt->affected_rows;

例:if($stmt->execute());

有結果集的繫結結果集

$stmt->bind_result(分別對應結果集中的列所設定的變數);

結果集操作

while($stmt->fetch())

一次性將結果全部取出

$stmt->store_result();

結果條數

$stmt->num_rows;

指標移動到n(先執行store_result)

$stmt->data_seek(n);

釋放預處理結果

$stmt->close();

關閉mysqli

$mysqli->close();

十.事務處理

(多個sql要完成的任務看為是乙個事務)一件事(有任何乙個環節出錯,都整個事務撤消, 如果都成功才去提交)

目前只有innodb和bdb支援事務

預設表都是自動提交的(autocommit)

步驟:關閉自動提交 set autocommit=0

開啟事務

start transaction

sql執行

語句執行成功提交,語句執行失敗則回滾commit/rollback

關閉自動提交

$mysqli->autocommit(0);

開啟事務(php5.5之後才支援)

$mysqli->begin_transaction();

執行要操作sql語句

$res1=$mysqli->query("update yh_member set money=money-500 where user_name='rose'");

$res2=$mysqli->query("update yh_member set money=money+500 where user_name1='jack'");

出現錯誤則進行回滾,沒有錯誤則進行提交

if(!$res1 || !$res2)else

開啟自動提交

$mysqli->autocommit(1);

MySQLi擴充套件庫

方法一 如果返回true代表開啟成功,false代表開啟失敗 var dump extension loaded mysqli 方法二 檢視所有已開啟的擴充套件 返回值為乙個陣列 extension get loaded extensions 會顯示出所有的擴充套件 print r extensio...

54 mysqli 擴充套件庫

mysqli 擴充套件庫 在 php.ini 總啟用 mysqli擴充套件庫 extension php mysqli.dll header content type text html charset utf8 mysqli 操作 mysql 資料庫 物件導向風格 1.建立mysqli物件 mys...

MySQL i 擴充套件

在上一章的內容中有寫出php的幾種擴充套件,本章會開啟mysql i 擴充套件的篇章。注意 mysql i 擴充套件只支援mysql資料庫 1.如何連線資料庫 連線資料庫 conn new mysqli localhost root root text 2 3306 檢視連線是否正確 if link...