簡單例項
面向過程方式
// 建立資料庫連線
$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();