本篇文章主要介紹PHP實作使用mysqli操作MySQL資料庫的方法,有興趣的朋友參考下,希望對大家有幫助。
PHP的 mysqli 擴充功能提供了其先行版本的所有功能,此外,由於 MySQL 已經是一個具有完整特性的資料庫伺服器 , 這為PHP 又添加了一些新特性 。而 mysqli 恰恰也支援了這些新特性。
一.建立和斷開連接
與 MySQL資料庫互動時,首先要建立連接,最後要斷開連接,這包括與伺服器連接並選擇一個資料庫 , 以及最後關閉連接 。與 mysqli 幾乎所有的特性一樣 , 這一點可以使用物件導向的方法來完成,也可以採用過程化的方式完成。
1. 建立一個mysqli 的物件
$_mysqli = newmysqli();
# 2. 連結MySQL的主機、使用者、密碼、資料庫
$_mysqli->connect( 'localhost' , 'root' , 'yangfan' , 'guest' );
3. 建立連接參數的mysqli物件
$_mysqli = newmysqli( 'localhost' , 'root' , 'yangfan' , 'guest ' );
4. 單獨選擇資料庫
$_mysqli->select_db( 'testguest' );
5. 斷開MySQL
$_mysqli->close();
二.處理連線錯誤
如果無法連接 MySQL資料庫,那麼這個頁面不太可能繼續完成預期的工作。因此,一定要注意監視連接錯誤並相應地做出反應 。 Mysqli 擴充包含有許多特性可以用來擷取錯誤訊息,例如:mysqli_connect_errno() 和 mysqli_connect_error() 方法。
mysqli_connect_errno()函數傳回連接資料庫傳回的錯誤號碼。
Mysqli_connect_error()函數傳回連接資料庫傳回的錯誤代碼。
if(mysqli_connect_errno()) { echo' 数据库连接错误,错误信息: ' .mysqli_connect_error(); exit(); }
errno屬性傳回資料庫操作時的錯誤號碼。
error屬性傳回資料庫操作時的錯誤代碼。
if( $_mysqli ->errno) { echo' 数据库操作时发生错误,错误代码是: ' . $_mysqli ->error; }
三.與資料庫互動
絕大多數查詢都與建立(Creation) 、取得 (Retrieval) 、更新 (Update) 和刪除 (Deletion) 任務有關,這些任務統稱為 CRUD 。
1. 取得資料
網頁程式大多數工作都是在取得和格式化所要求的資料。為此,要向資料庫發送SELECT查詢,再對結果進行迭代處理,將各行輸出給瀏覽器,並依照自己的要求輸出。
// 设置一下编码 utf8 $_mysqli->set_charset( "utf8" ); // 创建一句 SQL 语句 $_sql = "SELECT* FROM t g_user" ; // 执行 sql 语句把结果集赋给$_result $_result = $_mysqli->query( $_sql ); // 将结果集的第一行输出 print_r( $_result->fetch_row()); // 释放查询内存 ( 销毁 ) $_result->free();
2. 解析查詢結果
一旦執行了查詢並準備好結果集,下面就可以解析取得到的結果行了。你可以使用多個方法來取得各行中的欄位 ,具體選擇哪一個方法主要取決於個人喜好 , 因為只是引用欄位的方法有所不同。
將結果集放到物件中
由於你可能會使用 mysqli的物件導向的語法 , 所以完全可以採用物件導向的方式來管理結果集。可以使用fetch_object() 方法來完成。
// 將結果集包裝成物件
$_row = $_reslut->fetch_object();
// 輸出物件中的一個欄位(屬性)
echo $_row->tg_username;
// 遍歷所有的使用者名稱
while (!! $_row =$_reslut ->fetch_object()) {
echo$_row ->tg_username. '
' ;
}
##使用索引數組和關聯數組
// 將結果集包裝成陣列( 索引關聯)$_row = $_reslut->fetch_array();// 輸出下標是3 的欄位(屬性)echo $_row [ 3 ];// 將結果集包裝成索引陣列$_row = $_reslut->fetch_row();echo $_row [ 3 ];// 將結果集包裝成關聯數組$_row = $_reslut->fetch_assoc();echo $_row ['tg_username' ];
3. 確定所選的行和受影響的行
通常希望能夠確定SELECT查詢傳回的行數, 或受INSERT 、 UPDATE 或DELET 查詢影響的行數。我們可以使用num_rows 和 affected_rows 兩個屬性// 當使用查詢時,想了解 SELECT查詢了多少行,可以使用 num_rows 。 echo $_reslut->num_rows;// 使用查詢時, 想了解SELECT 、 INSERT 、 UPDATE 、 DELETE 查詢時影響的行數,可以使用affected_rows; 注意,它是$_mysqli 下的屬性echo $_mysqli->affected_rows;
4. 移动指针的操作和获取字段
当你并不想从第一条数据开始获取 ,或者并不想从第一个字段获取 , 你可以使用数据指针移动或者字段指针移动的方式调整到恰当的位置。 当然 , 你还可以获取字段的名称及其相关的属性。
// 计算有多少条字段 echo $_reslut->field_count; // 获取字段的名称 $_field = $_reslut->fetch_field(); echo $_field->name; // 遍历字段 while (!! $_field =$_reslut ->fetch_field()) { echo$_field ->name. '<br />' ; } // 一次性取得字段数组 print_r( $_reslut->fetch_fields()); // 移动数据指针 $_reslut->data_seek( 5 ); // 移动字段指针 $_reslut->field_seek( 2 );
5. 执行多条 SQL 语句
有的时候 ,我们需要在一张页面上同时执行多条 SQL 语句 , 之前的方法就是分别创建多个结果集然后使用。但这样资源消耗很大,也不利于管理。PHP 提供了执行多条 SQL 语句的方法 $_mysqli->multi_query() ;
// 创建多条 SQL 语句 $_sql .="SELECT * FROM tg_user;" ; $_sql .="SELECT * FROM tg_photo;" ; $_sql .="SELECT * FROM tg_article" ; // 开始执行多条 SQL 语句 if ( $_mysqli->multi_query( $_sql )) { //开始获取第一条 SQL 语句的结果集 $_result= $_mysqli ->store_result(); print_r($_result ->fetch_array()); //将结果集指针移到下一个 $_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. 执行数据库事务
事务 (transaction)是作为整个一个单元的一组有序的数据库操作 。 如果一组中的所有操作都成功 , 则认为事务成功 ,即使只有一个失败操作 , 事务也不成功 。 如果所有操作成功完成 , 事务则提交 (commit) ,其修改将作用于所有其他数据库进程 。 如果一个操作失败 , 则事务将回滚 (roll back),该事务所有操作的影响都将取消。
首先 , 您的 MySQL 是InnoDB 或 BDB 引擎的一种 , 一般来说 , 你安装了 AppServ 的集成包 , 你选择 InnoDB的引擎的数据库即可 。 如果你建立的表不是 InnoDB , 可以在 phpmyadmin里修改。
// 首先你必须关闭自动提交数据 $_mysqli->autocommit( false ); // 创建一个 SQL 语句,必须同时运行成功,不能出现一个成功,一个失败 $_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;" ; // 执行两条 SQL 语句 if ( $_mysqli->multi_query( $_sql )) { //获取第一条 SQL 一影响的行数 $_success= $_mysqli ->affected_rows == 1 ? true : false ; //下移,第二条 SQL $_mysqli->next_result(); //获取第二条 SQL 影响的行数 $_success2 = $_mysqli ->affected_rows == 1 ? true : false ; //判断是否都正常通过了,两个 SQL if( $_success && $_success2 ) { $_mysqli->commit(); echo' 完美提交! ' ; }else { $_mysqli->rollback(); echo' 程序出现异常! ' ; } } } else { echo"SQL 语句有误: " . $_mysqli ->errno. $_mysqli ->error; } // 最后还必须开启自动提交 $_mysqli->autocommit( true );
以上就是本文的全部内容,希望对大家的学习有所帮助。
相关推荐:
php、mysql查询当天,查询本周,查询本月的数据实例详解
以上是PHP實作使用mysqli操作MySQL資料庫的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!