簡單例項
-
程式導向方式
// 建立資料庫連線 $connect = mysqli_connect('127.0.0.1', 'root', 'root', 'test', 8889); // 判讀是否連線成功了 if (!$connect) { echo '資料庫連線失敗<br>'; // 列印連線失敗的原因 var_dump(mysqli_connect_error($connect)); exit(); } // 設定字符集 mysqli_set_charset($connect, 'utf8'); // 組裝sql語句 $sql = "SHOW TABLES"; // 執行sql語句 $res = mysqli_query($connect, $sql); // 獲取結果 $res_array = mysqli_fetch_all($res); var_dump($res_array); mysqli_close($connect); // 輸出結果: array (size=2) 0 => array (size=1) 0 => string 'family' (length=6) 1 => array (size=1) 0 => string 'person' (length=6)
-
物件導向方式
// 建立資料庫連線物件 $connect = new mysqli('127.0.0.1', 'root', 'root', 'test', 8889); // 判斷是否連線成功 if ($connect->connect_errno) { // 發生錯誤時,$connect->connect_errno會返回對應的錯誤碼 echo '資料庫連線失敗<br>'; // 列印錯誤資訊 var_dump($connect->connect_error); } // 設定字符集 $connect->set_charset('utf8'); // 組裝sql語句 $sql = "SHOW TABLES"; // 執行sql語句 $res = $connect->query($sql); // 獲取結果集 $data = $res->fetch_all(); // 關閉連線 $connect->close();
mysqli詳解
1. 連線資料庫
連線資料庫有兩種方式,一種是通過mysqli_connect()
幫助函式,另一種是通過new mysqli()
物件來實現
兩者所需傳的引數同樣都是這些(注意先後順序):
-
host
資料庫地址資料庫地址可以傳入域名或ip地址,如
localhost
或者127.0.0.1
-
username
管理使用者名稱管理員賬號,如:
root
-
password 管理員密碼
管理員賬號的密碼
-
dtabases
要連線的資料選擇要連線的資料庫
-
port
埠號該引數如果不傳,預設請求
3306
埠
2. 設定字符集
- 使用
mysqli_set_charset($connect, 'utf8');
函式設定
第一個引數為mysqli的物件,第二個引數為需要設定的字符集,注意mysql的字符集中的utf8
沒有中間的-
- 使用物件導向的方式建立
$connect = new mysqli('127.0.0.1', 'root', 'root', 'test', 8889);
$connect->set_charset('utf8');
// 或者
$connect = mysqli_connect('127.0.0.1', 'root', 'root', 'test', 8889);
$connect->set_charset('utf8'); # 都可以這麼使用
3. 執行sql語句
通過mysqli_query()進行執行SELECT
, SHOW
, DESCRIBE
或 EXPLAIN
,失敗時返回false
$sql = "SHOW TABLES";
$res = $connect->query($sql); # 或者 mysqli_query($connect, $sql);
列印一下他返回了什麼
var_dump($res);
object(mysqli_result)[2]
public 'current_field' => int 0
public 'field_count' => int 1
public 'lengths' => null
public 'num_rows' => int 2 # 返回了幾條資料
public 'type' => int 0
4. 獲取結果
通過mysqli_query()
執行的sql語句之後如何獲取結果呢?可以通過mysqli_fetch_array()
、mysqli_fetch_assoc()
、mysqli_fetch_all()
、mysqli_fetch_row()
等進行獲取結果
當需要獲取一條資料的時候可以使用mysqli_fetch_row()
-
mysqli_fetch_array()
該函式的第一個引數是通過
mysqli_query()
返回的物件第二個引數是獲取結果的型別:
MYSQLI_ASSOC
關聯陣列 同mysqli_fetch_assoc()
函式
MYSQLI_NUM
數字陣列
MYSQLI_BOTH
預設。同時產生關聯和數字陣列# MYSQLI_BOTH 預設情況 $sql = "SHOW TABLES"; $res = $connect->query($sql); $data = $res->fetch_array(); # 或者 mysqli_fetch_array($res) var_dump($data); # 輸出結果 array (size=2) 0 => string 'family' (length=6) 'Tables_in_test' => string 'family' (length=6)
# MYSQLI_ASSOC 獲取關聯陣列 $sql = "SHOW TABLES"; $res = $connect->query($sql); $data = $res->fetch_array(MYSQLI_ASSOC); # 或者 mysqli_fetch_array($res, MYSQLI_ASSOC) var_dump($data); # 輸出結果 array (size=1) 'Tables_in_test' => string 'family' (length=6)
# MYSQLI_NUM 獲取關聯陣列 $sql = "SHOW TABLES"; $res = $connect->query($sql); $data = $res->fetch_array(MYSQLI_NUM); # 或者 mysqli_fetch_array($res, MYSQLI_NUM) var_dump($data); # 輸出結果 array (size=1) 0 => string 'family' (length=6)
-
mysqli_fetch_assoc()
該函式與
mysqli_fetch_array
第二個引數傳遞MYSQLI_ASSOC
的結果是一樣的$sql = "SHOW TABLES"; $res = $connect->query($sql); $data = $res->fetch_assoc(); # 或者 mysqli_fetch_assoc($res) # 輸出結果 array (size=1) 'Tables_in_test' => string 'family' (length=6)
-
mysqli_fetch_all
同
mysqli_fetch_array
一樣,只不過他的預設獲取是數字索引陣列$sql = "SHOW TABLES"; $res = $connect->query($sql); $data = $res->fetch_all(); # 或者 mysqli_fetch_all($res) # 輸出結果 array (size=2) 0 => array (size=1) 0 => string 'family' (length=6) 1 => array (size=1) 0 => string 'person' (length=6)
-
mysqli_fetch_row
獲取一條資料
$sql = "SHOW TABLES"; $res = $connect->query($sql); $data = $res->fetch_row(); # 或者 mysqli_fetch_row($res) # 輸出結果 array (size=1) 0 => string 'family' (length=6)
5. 關閉連線
mysqli_close($connect);
// 或者
$connect->close();