mysqli的基本使用

穎小主發表於2021-09-07

簡單例項

  • 程式導向方式

    // 建立資料庫連線
    $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, DESCRIBEEXPLAIN,失敗時返回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();

相關文章