在PHP 中,如果你用(MySQL Improved Extension)擴展連接數據庫並執行查詢,當你執行像mysqli_query()這樣的查詢函數時,如果查詢返回了結果集(例如SELECT查詢),你會得到一個mysqli_result對象。
這個mysqli_result對像是一個用於操作查詢結果的接口,你可以通過它來逐行、逐字段地讀取查詢返回的數據。
mysqli_result是面向對象和過程化兩種風格下都存在的一個結果集對象。它包含了數據庫查詢返回的所有行和列數據,但它並不會一次性把這些數據都加載到內存裡,而是需要通過各種方法去按需取出。
常見的獲取數據的方法有:
fetch_assoc() → 獲取一行關聯數組
fetch_row() → 獲取一行索引數組
fetch_object() → 獲取一行對象
fetch_array() → 獲取一行,既可以是關聯數組,也可以是索引數組,或者兩者都有(可配置)
本文重點說說fetch_array() 。
fetch_array()是mysqli_result的一個方法,用於獲取當前結果集中的一行數據,返回形式是數組。
調用方式有兩種風格:
面向對像風格:
$result = $mysqli->query("SELECT id, name FROM users");
$row = $result->fetch_array();
過程化風格:
$result = mysqli_query($conn, "SELECT id, name FROM users");
$row = mysqli_fetch_array($result);
無論哪種方式,它每調用一次就取出一行,直到沒有更多行(此時返回false )。
fetch_array()可以接收一個可選參數,用來控制返回數組的類型。
完整簽名:
array mysqli_fetch_array(mysqli_result $result, int $resulttype = MYSQLI_BOTH)
參數$resulttype取值有:
MYSQLI_ASSOC → 只返回關聯數組(字段名作key)
MYSQLI_NUM → 只返回數字索引數組(字段索引作key)
MYSQLI_BOTH (默認)→ 返回關聯+ 數字索引混合數組
舉個例子:
$conn = mysqli_connect("localhost", "username", "password", "database");
$result = mysqli_query($conn, "SELECT id, name FROM users");
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
echo "ID: " . $row['id'] . " Name: " . $row['name'] . "<br>";
}
這裡我們用MYSQLI_ASSOC ,所以$row裡就只有字段名作key,沒有數字索引。
完整例子: