PHP自5.5起,已經完全廢除mysql擴展,官方推薦使用MySQLI或PDO來代替。這篇文章主要講mysqli的一些基本操作。使用mysqli有兩個風格的寫法,對象式或函數式,下面我們只展示函數式的寫法風格。
數據庫連接
首先肯定需要連接數據庫。連接數據前,我們需要準備的一般有數據庫的賬號、密碼、端口號、數據庫名。
因為網絡原因或其他原因經常會有連接不上數據庫的情況,所以,我們需要做連接失敗的處理。
<?php // 數據庫連接 $mysqli = mysqli_connect( 'localhost', 'root', '', 'test' ); if (mysqli_connect_errno()) { throw new Exception('databases connect error:' .mysqli_connect_error()); } // ...一些數據庫操作 // 關閉數據庫資源 mysqli_close($mysqli);
設置字符集
設置字符集使用mysqli_set_charset();
字符集目前我們大都使用utf8mb4,因為他支持4個字節長度的字符。他支持一些emoji表情字符。當然如果你不需要支持4字節字符的話可以選擇使用utf8,因為他比較剩空間。
mysqli_set_chartset($mysqli, 'utf8mb4');
重新選擇數據庫
數據庫連接后,還可以重新選擇數據庫。
mysqli_select_db($mysqli, '數據庫名');
CURD操作
mysqli_query():對數據庫執行一次操作,DDL、DQL 、DML都支持。
mysqli_affected_rows():獲取影響記錄行數。
新增數據操作
mysqli_query($mysqli, "INSERT INTO users(username, age, sex) VALUES('周杰倫', 35, '男'), ('謝霆鋒', 35, '男')" ); if (mysqli_affected_rows($mysqli) <= 0) { throw new Exception('databases insert error:' . mysqli_error($mysqli)); }
修改數據操作
這里面有一個注意點,mysqli_affected_rows返回的值為0的情況。它更新的信息與上次完全一樣,這個情況很普遍。比如說在修改的時候,連續點擊了多次修改按鈕。但并不能說明程序代碼有問題。所以,和新增不一樣的是,返回0也應該是成功狀態。
mysqli_query($mysqli, "UPDATE users SET age=40 WHERE user_id = 1" ); if (mysqli_affected_rows($mysqli) < 0) { throw new Exception('databases update error:' . mysqli_error($mysqli)); }
刪除數據操作
注意:修改和刪除操作必須加where條件,不然將會修改整個表的數據,后果不堪設想(刪庫跑路o(╯□╰)o)。
mysqli_query($mysqli, "Delete FROM users WHERE user_id = 100" ); if (mysqli_affected_rows($mysqli) <= 0) { throw new Exception('databases delete error:' . mysqli_error($mysqli)); }
查詢操作
當mysqli_query執行的是一條查詢語句時,該函數會返回mysqli_result結果集。
mysqli_fetch_all()從結果集中獲取全部數據。該函數第二個參數可以指定返回數據的格式。分別為:
-
MYSQLI_NUM:返回索引數組
-
MYSQLI_ASSOC:返回關聯數組
-
MYSQLI_BOTH:既有索引數組也有關聯數組
另外需要注意,對結果集的操作結束后,記得銷毀結果集資源。
// 數據庫連接 $mysqli = mysqli_connect( 'localhost', 'root', '', 'test' ); if (mysqli_connect_errno()) { throw new Exception('databases connect error:' .mysqli_connect_error()); } mysqli_set_charset($mysqli, 'utf8mb4'); $result = mysqli_query($mysqli, "SELECT * FROM users" ); if (mysqli_affected_rows($mysqli) < 0) { throw new Exception('databases select error:' . mysqli_error($mysqli)); } $users = mysqli_fetch_all($result, MYSQLI_ASSOC); // 銷毀結果集資源 mysqli_free_result($result); // 關閉數據庫資源 mysqli_close($mysqli);