PHP使用mysqli操作MySQL數(shù)據(jù)庫(kù)的簡(jiǎn)單方法
PHP的 mysqli 擴(kuò)展提供了其先行版本的所有功能,此外,由于 MySQL 已經(jīng)是一個(gè)具有完整特性的數(shù)據(jù)庫(kù)服務(wù)器 , 這為PHP 又添加了一些新特性 。 而 mysqli 恰恰也支持了這些新特性。
一. 建立和斷開連接
與 MySQL數(shù)據(jù)庫(kù)交互時(shí),首先要建立連接,最后要斷開連接,這包括與服務(wù)器連接并選擇一個(gè)數(shù)據(jù)庫(kù) , 以及最后關(guān)閉連接 。與 mysqli 幾乎所有的特性一樣 , 這一點(diǎn)可以使用面向?qū)ο蟮姆椒▉?lái)完成,也可以采用過(guò)程化的方式完成。
1. 創(chuàng)建一個(gè) mysqli 的對(duì)象
$_mysqli = newmysqli();
2. 連接 MySQL的主機(jī)、用戶、密碼、數(shù)據(jù)庫(kù)
$_mysqli->connect( 'localhost' , 'root' , 'yangfan' , 'guest' );
3. 創(chuàng)建帶連接參數(shù)的 mysqli對(duì)象
$_mysqli = newmysqli( 'localhost' , 'root' , 'yangfan' , 'guest' );
4. 單獨(dú)選擇數(shù)據(jù)庫(kù)
$_mysqli->select_db( 'testguest' );
5. 斷開 MySQL
$_mysqli->close();
二. 處理連接錯(cuò)誤
如果無(wú)法連接 MySQL數(shù)據(jù)庫(kù),那么這個(gè)頁(yè)面不太可能繼續(xù)完成預(yù)期的工作。因此,一定要注意監(jiān)視連接錯(cuò)誤并相應(yīng)地做出反應(yīng) 。Mysqli 擴(kuò)展包含有很多特性可以用來(lái)捕獲錯(cuò)誤信息,例如:mysqli_connect_errno() 和 mysqli_connect_error() 方法。
mysqli_connect_errno()函數(shù)返回連接數(shù)據(jù)庫(kù)返回的錯(cuò)誤號(hào)。
Mysqli_connect_error()函數(shù)返回連接數(shù)據(jù)庫(kù)返回的錯(cuò)誤代碼。
if(mysqli_connect_errno()) { echo' 數(shù)據(jù)庫(kù)連接錯(cuò)誤,錯(cuò)誤信息: ' .mysqli_connect_error(); exit(); }
errno屬性返回?cái)?shù)據(jù)庫(kù)操作時(shí)的錯(cuò)誤號(hào)。
error屬性返回?cái)?shù)據(jù)庫(kù)操作時(shí)的錯(cuò)誤代碼。
if( $_mysqli ->errno) { echo' 數(shù)據(jù)庫(kù)操作時(shí)發(fā)生錯(cuò)誤,錯(cuò)誤代碼是: ' . $_mysqli ->error; }
三. 與數(shù)據(jù)庫(kù)進(jìn)行交互
絕大多數(shù)查詢都與創(chuàng)建(Creation) 、獲取 (Retrieval) 、更新 (Update) 和刪除 (Deletion) 任務(wù)有關(guān),這些任務(wù)統(tǒng)稱為 CRUD 。
1. 獲取數(shù)據(jù)
網(wǎng)頁(yè)程序大多數(shù)工作都是在獲取和格式化所請(qǐng)求的數(shù)據(jù)。為此,要向數(shù)據(jù)庫(kù)發(fā)送SELECT查詢,再對(duì)結(jié)果進(jìn)行迭代處理,將各行輸出給瀏覽器,并按照自己的要求輸出。
// 設(shè)置一下編碼 utf8 $_mysqli->set_charset( "utf8" ); // 創(chuàng)建一句 SQL 語(yǔ)句 $_sql = "SELECT* FROM t g_user" ; // 執(zhí)行 sql 語(yǔ)句把結(jié)果集賦給$_result $_result = $_mysqli->query( $_sql ); // 將結(jié)果集的第一行輸出 print_r( $_result->fetch_row()); // 釋放查詢內(nèi)存 ( 銷毀 ) $_result->free();
2. 解析查詢結(jié)果
一旦執(zhí)行了查詢并準(zhǔn)備好結(jié)果集 ,下面就可以解析獲取到的結(jié)果行了 。 你可以使用多個(gè)方法來(lái)獲取各行中的字段 ,具體選擇哪一個(gè)方法主要取決于個(gè)人喜好 , 因?yàn)橹皇且米侄蔚姆椒ㄓ兴煌?/p>
將結(jié)果集放到對(duì)象中
由于你可能會(huì)使用 mysqli的面向?qū)ο蟮恼Z(yǔ)法 , 所以完全可以采用面向?qū)ο蟮姆绞焦芾斫Y(jié)果集??梢允褂胒etch_object() 方法來(lái)完成。
// 將結(jié)果集包裝成對(duì)象
$_row = $_reslut->fetch_object();
// 輸出對(duì)象中的一個(gè)字段(屬性)
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 兩個(gè)屬性
// 當(dāng)使用查詢時(shí),想了解 SELECT查詢了多少行,可以使用 num_rows 。
echo $_reslut->num_rows;
// 當(dāng)使用查詢時(shí) , 想了解SELECT 、 INSERT 、 UPDATE 、 DELETE 查詢時(shí)影響的行數(shù),可以使用affected_rows; 注意,它是 $_mysqli 下的屬性
echo $_mysqli->affected_rows;
4. 移動(dòng)指針的操作和獲取字段
當(dāng)你并不想從第一條數(shù)據(jù)開始獲取 ,或者并不想從第一個(gè)字段獲取 , 你可以使用數(shù)據(jù)指針移動(dòng)或者字段指針移動(dòng)的方式調(diào)整到恰當(dāng)?shù)奈恢谩?當(dāng)然 , 你還可以獲取字段的名稱及其相關(guān)的屬性。
// 計(jì)算有多少條字段 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()); // 移動(dòng)數(shù)據(jù)指針 $_reslut->data_seek( 5 ); // 移動(dòng)字段指針 $_reslut->field_seek( 2 );
5. 執(zhí)行多條 SQL 語(yǔ)句
有的時(shí)候 ,我們需要在一張頁(yè)面上同時(shí)執(zhí)行多條 SQL 語(yǔ)句 , 之前的方法就是分別創(chuàng)建多個(gè)結(jié)果集然后使用。但這樣資源消耗很大,也不利于管理。PHP 提供了執(zhí)行多條 SQL 語(yǔ)句的方法 $_mysqli->multi_query() ;
// 創(chuàng)建多條 SQL 語(yǔ)句 $_sql .="SELECT * FROM tg_user;" ; $_sql .="SELECT * FROM tg_photo;" ; $_sql .="SELECT * FROM tg_article" ; // 開始執(zhí)行多條 SQL 語(yǔ)句 if ( $_mysqli->multi_query( $_sql )) { //開始獲取第一條 SQL 語(yǔ)句的結(jié)果集 $_result= $_mysqli ->store_result(); print_r($_result ->fetch_array()); //將結(jié)果集指針移到下一個(gè) $_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 語(yǔ)句有誤! ' ; }
6. 執(zhí)行數(shù)據(jù)庫(kù)事務(wù)
事務(wù) (transaction)是作為整個(gè)一個(gè)單元的一組有序的數(shù)據(jù)庫(kù)操作 。 如果一組中的所有操作都成功 , 則認(rèn)為事務(wù)成功 ,即使只有一個(gè)失敗操作 , 事務(wù)也不成功 。 如果所有操作成功完成 , 事務(wù)則提交 (commit) ,其修改將作用于所有其他數(shù)據(jù)庫(kù)進(jìn)程 。 如果一個(gè)操作失敗 , 則事務(wù)將回滾 (roll back),該事務(wù)所有操作的影響都將取消。
首先 , 您的 MySQL 是InnoDB 或 BDB 引擎的一種 , 一般來(lái)說(shuō) , 你安裝了 AppServ 的集成包 , 你選擇 InnoDB的引擎的數(shù)據(jù)庫(kù)即可 。 如果你建立的表不是 InnoDB , 可以在 phpmyadmin里修改。
// 首先你必須關(guān)閉自動(dòng)提交數(shù)據(jù) $_mysqli->autocommit( false ); // 創(chuàng)建一個(gè) SQL 語(yǔ)句,必須同時(shí)運(yùn)行成功,不能出現(xiàn)一個(gè)成功,一個(gè)失敗 $_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 語(yǔ)句 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 ; //判斷是否都正常通過(guò)了,兩個(gè) SQL if( $_success && $_success2 ) { $_mysqli->commit(); echo' 完美提交! ' ; }else { $_mysqli->rollback(); echo' 程序出現(xiàn)異常! ' ; } } } else { echo"SQL 語(yǔ)句有誤: " . $_mysqli ->errno. $_mysqli ->error; } // 最后還必須開啟自動(dòng)提交 $_mysqli->autocommit( true );
以上這篇PHP使用mysqli操作MySQL數(shù)據(jù)庫(kù)的簡(jiǎn)單方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
學(xué)習(xí)php開源項(xiàng)目的源碼指南
這篇文章主要介紹了學(xué)習(xí)php開源項(xiàng)目的源碼指南,需要的朋友可以參考下2014-12-12php實(shí)現(xiàn)異步數(shù)據(jù)調(diào)用的方法
這篇文章主要介紹了php實(shí)現(xiàn)異步數(shù)據(jù)調(diào)用的方法,分享了4種PHP異步執(zhí)行的常用方式,感興趣的小伙伴們可以參考一下2015-12-12php異常:Parse error: syntax error, unexpected T_ENCAPSED_AND_W
PHP會(huì)出現(xiàn)eval()'d code error 錯(cuò)誤提示的原因一般都是因?yàn)槟0邋e(cuò)誤,原因有以下幾種情況2011-05-05詳解PHP多個(gè)進(jìn)程配合redis的有序集合實(shí)現(xiàn)大文件去重
這篇文章主要介紹了PHP多個(gè)進(jìn)程配合redis的有序集合實(shí)現(xiàn)大文件去重,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí) 吧2019-03-03php+mysql+jquery實(shí)現(xiàn)日歷簽到功能
本文主要介紹了php+mysql+jquery實(shí)現(xiàn)日歷簽到功能的過(guò)程與步驟,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02