在PHP中使用Mysqli操作資料庫

來源:互聯網
上載者:User

標籤:

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. ‘ <br /> ‘ ;

}

使用索引數組和關聯陣列

// 將結果集封裝成數組 ( 索引 +關聯 )

$_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中使用Mysqli操作資料庫

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.