溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何在PHP項目中利用mysqli對MySQL數(shù)據(jù)庫進(jìn)行操作

發(fā)布時間:2020-12-18 16:16:47 來源:億速云 閱讀:166 作者:Leah 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)如何在PHP項目中利用mysqli對MySQL數(shù)據(jù)庫進(jìn)行操作,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

PHP的 mysqli 擴(kuò)展提供了其先行版本的所有功能,此外,由于 MySQL 已經(jīng)是一個具有完整特性的數(shù)據(jù)庫服務(wù)器 , 這為PHP 又添加了一些新特性 。 而 mysqli 恰恰也支持了這些新特性。

一. 建立和斷開連接

與 MySQL數(shù)據(jù)庫交互時,首先要建立連接,最后要斷開連接,這包括與服務(wù)器連接并選擇一個數(shù)據(jù)庫 , 以及最后關(guān)閉連接 。與 mysqli 幾乎所有的特性一樣 , 這一點(diǎn)可以使用面向?qū)ο蟮姆椒▉硗瓿桑部梢圆捎眠^程化的方式完成。

1. 創(chuàng)建一個 mysqli 的對象

$_mysqli = newmysqli();

2. 連接 MySQL的主機(jī)、用戶、密碼、數(shù)據(jù)庫

$_mysqli->connect( 'localhost' , 'root' , 'yangfan' , 'guest' );

3. 創(chuàng)建帶連接參數(shù)的 mysqli對象

$_mysqli = newmysqli( 'localhost' , 'root' , 'yangfan' , 'guest' );

4. 單獨(dú)選擇數(shù)據(jù)庫

$_mysqli->select_db( 'testguest' );

5. 斷開 MySQL

$_mysqli->close();

二. 處理連接錯誤

如果無法連接 MySQL數(shù)據(jù)庫,那么這個頁面不太可能繼續(xù)完成預(yù)期的工作。因此,一定要注意監(jiān)視連接錯誤并相應(yīng)地做出反應(yīng) 。Mysqli 擴(kuò)展包含有很多特性可以用來捕獲錯誤信息,例如:mysqli_connect_errno() 和 mysqli_connect_error() 方法。

mysqli_connect_errno()函數(shù)返回連接數(shù)據(jù)庫返回的錯誤號。

Mysqli_connect_error()函數(shù)返回連接數(shù)據(jù)庫返回的錯誤代碼。

if(mysqli_connect_errno()) {

echo' 數(shù)據(jù)庫連接錯誤,錯誤信息: ' .mysqli_connect_error();

exit();

}

errno屬性返回數(shù)據(jù)庫操作時的錯誤號。

error屬性返回數(shù)據(jù)庫操作時的錯誤代碼。

if( $_mysqli ->errno) {

echo' 數(shù)據(jù)庫操作時發(fā)生錯誤,錯誤代碼是: ' . $_mysqli ->error;

}

三. 與數(shù)據(jù)庫進(jìn)行交互

絕大多數(shù)查詢都與創(chuàng)建(Creation) 、獲取 (Retrieval) 、更新 (Update) 和刪除 (Deletion) 任務(wù)有關(guān),這些任務(wù)統(tǒng)稱為 CRUD 。

1. 獲取數(shù)據(jù)

網(wǎng)頁程序大多數(shù)工作都是在獲取和格式化所請求的數(shù)據(jù)。為此,要向數(shù)據(jù)庫發(fā)送SELECT查詢,再對結(jié)果進(jìn)行迭代處理,將各行輸出給瀏覽器,并按照自己的要求輸出。

// 設(shè)置一下編碼 utf8

$_mysqli->set_charset( "utf8" );

// 創(chuàng)建一句 SQL 語句

$_sql = "SELECT* FROM t g_user" ;

// 執(zhí)行 sql 語句把結(jié)果集賦給$_result

$_result = $_mysqli->query( $_sql );

// 將結(jié)果集的第一行輸出

print_r( $_result->fetch_row());

// 釋放查詢內(nèi)存 ( 銷毀 )

$_result->free();

2. 解析查詢結(jié)果

一旦執(zhí)行了查詢并準(zhǔn)備好結(jié)果集 ,下面就可以解析獲取到的結(jié)果行了 。 你可以使用多個方法來獲取各行中的字段 ,具體選擇哪一個方法主要取決于個人喜好 , 因為只是引用字段的方法有所不同。

將結(jié)果集放到對象中

由于你可能會使用 mysqli的面向?qū)ο蟮恼Z法 , 所以完全可以采用面向?qū)ο蟮姆绞焦芾斫Y(jié)果集。可以使用fetch_object() 方法來完成。

// 將結(jié)果集包裝成對象

$_row = $_reslut->fetch_object();

// 輸出對象中的一個字段(屬性)

echo $_row->tg_username;

// 遍歷所有的用戶名稱

while (!! $_row =$_reslut ->fetch_object()) {

echo$_row ->tg_username. ' <br /> ' ;

}

使用索引數(shù)組和關(guān)聯(lián)數(shù)組

// 將結(jié)果集包裝成數(shù)組 ( 索引 +關(guān)聯(lián) )

$_row = $_reslut->fetch_array();

// 輸出下標(biāo)是 3 的字段(屬性)

echo $_row [ 3 ];

// 將結(jié)果集包裝成索引數(shù)組

$_row = $_reslut->fetch_row();

echo $_row [ 3 ];

// 將結(jié)果集包裝成關(guān)聯(lián)數(shù)組

$_row = $_reslut->fetch_assoc();

echo $_row ['tg_username' ];

3. 確定所選擇的行和受影響的行

通常希望能夠確定 SELECT查詢返回的行數(shù) , 或者受 INSERT 、 UPDATE 或 DELET 查詢影響的行數(shù)。我們可以使用num_rows 和 affected_rows 兩個屬性

// 當(dāng)使用查詢時,想了解 SELECT查詢了多少行,可以使用 num_rows 。

echo $_reslut->num_rows;

// 當(dāng)使用查詢時 , 想了解SELECT 、 INSERT 、 UPDATE 、 DELETE 查詢時影響的行數(shù),可以使用affected_rows; 注意,它是 $_mysqli 下的屬性

echo $_mysqli->affected_rows;

4. 移動指針的操作和獲取字段

當(dāng)你并不想從第一條數(shù)據(jù)開始獲取 ,或者并不想從第一個字段獲取 , 你可以使用數(shù)據(jù)指針移動或者字段指針移動的方式調(diào)整到恰當(dāng)?shù)奈恢谩?當(dāng)然 , 你還可以獲取字段的名稱及其相關(guān)的屬性。

// 計算有多少條字段

echo $_reslut->field_count;

// 獲取字段的名稱

$_field = $_reslut->fetch_field();

echo $_field->name;

// 遍歷字段

while (!! $_field =$_reslut ->fetch_field()) {

echo$_field ->name. '<br />' ;

}

// 一次性取得字段數(shù)組

print_r( $_reslut->fetch_fields());

// 移動數(shù)據(jù)指針

$_reslut->data_seek( 5 );

// 移動字段指針

$_reslut->field_seek( 2 );

5. 執(zhí)行多條 SQL 語句

有的時候 ,我們需要在一張頁面上同時執(zhí)行多條 SQL 語句 , 之前的方法就是分別創(chuàng)建多個結(jié)果集然后使用。但這樣資源消耗很大,也不利于管理。PHP 提供了執(zhí)行多條 SQL 語句的方法 $_mysqli->multi_query() ;

// 創(chuàng)建多條 SQL 語句

$_sql .="SELECT * FROM tg_user;" ;

$_sql .="SELECT * FROM tg_photo;" ;

$_sql .="SELECT * FROM tg_article" ;

// 開始執(zhí)行多條 SQL 語句

if ( $_mysqli->multi_query( $_sql )) {

//開始獲取第一條 SQL 語句的結(jié)果集

$_result= $_mysqli ->store_result();

print_r($_result ->fetch_array());

//將結(jié)果集指針移到下一個

$_mysqli->next_result();

$_result= $_mysqli ->store_result();

print_r($_result ->fetch_array());

$_mysqli->next_result();

$_result= $_mysqli ->store_result();

print_r($_result ->fetch_array());

} else {

echo'sql 語句有誤! ' ;

}

6. 執(zhí)行數(shù)據(jù)庫事務(wù)

事務(wù) (transaction)是作為整個一個單元的一組有序的數(shù)據(jù)庫操作 。 如果一組中的所有操作都成功 , 則認(rèn)為事務(wù)成功 ,即使只有一個失敗操作 , 事務(wù)也不成功 。 如果所有操作成功完成 , 事務(wù)則提交 (commit) ,其修改將作用于所有其他數(shù)據(jù)庫進(jìn)程 。 如果一個操作失敗 , 則事務(wù)將回滾 (roll back),該事務(wù)所有操作的影響都將取消。

首先 , 您的 MySQL 是InnoDB 或 BDB 引擎的一種 , 一般來說 , 你安裝了 AppServ 的集成包 , 你選擇 InnoDB的引擎的數(shù)據(jù)庫即可 。 如果你建立的表不是 InnoDB , 可以在 phpmyadmin里修改。

// 首先你必須關(guān)閉自動提交數(shù)據(jù)

$_mysqli->autocommit( false );

// 創(chuàng)建一個 SQL 語句,必須同時運(yùn)行成功,不能出現(xiàn)一個成功,一個失敗

$_sql .="UPDATE tg_friend SET tg_state=tg_state+5 WHERE tg_id=1;" ;

$_sql .="UPDATE tg_flower SET tg_flower=tg_flower-5 WHERE tg_id=1;" ;

// 執(zhí)行兩條 SQL 語句

if ( $_mysqli->multi_query( $_sql )) {

//獲取第一條 SQL 一影響的行數(shù)

$_success= $_mysqli ->affected_rows == 1 ? true : false ;

//下移,第二條 SQL

$_mysqli->next_result();

//獲取第二條 SQL 影響的行數(shù)

$_success2 = $_mysqli ->affected_rows == 1 ? true : false ;

//判斷是否都正常通過了,兩個 SQL

if( $_success && $_success2 ) {

$_mysqli->commit();

echo' 完美提交! ' ;

}else {

$_mysqli->rollback();

echo' 程序出現(xiàn)異常! ' ;

}

}

} else {

echo"SQL 語句有誤: " . $_mysqli ->errno. $_mysqli ->error;

}

// 最后還必須開啟自動提交

$_mysqli->autocommit( true );

關(guān)于如何在PHP項目中利用mysqli對MySQL數(shù)據(jù)庫進(jìn)行操作就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI