在使用PHP 和MySQL 開發應用時,我們經常會用到mysqli來執行數據庫查詢。執行SELECT語句後, mysqli_query()返回一個mysqli_result對象,但這個對象並不是直接可用的數組格式。為了更方便地處理數據,我們通常需要把查詢結果完整地轉換成一個二維數組。
下面是具體的實現方法。
我們可以使用mysqli_fetch_all()來一次性獲取所有行,但要注意這個函數需要至少PHP 5.3 及以上版本。如果要兼容更早的版本,可以使用mysqli_fetch_assoc()結合循環。
以下是使用mysqli_fetch_all()的例子:
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
// 檢查連接
if ($mysqli->connect_error) {
die("連接失敗: " . $mysqli->connect_error);
}
$sql = "SELECT * FROM your_table";
$result = $mysqli->query($sql);
if ($result) {
// MYSQLI_ASSOC 表示返回關聯數組
$data = $result->fetch_all(MYSQLI_ASSOC);
print_r($data);
} else {
echo "查詢失敗: " . $mysqli->error;
}
$mysqli->close();
?>
如果你需要兼容更早版本的PHP,推薦使用while循環:
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_error) {
die("連接失敗: " . $mysqli->connect_error);
}
$sql = "SELECT * FROM your_table";
$result = $mysqli->query($sql);
$data = [];
if ($result) {
while ($row = $result->fetch_assoc()) {
$data[] = $row;
}
print_r($data);
} else {
echo "查詢失敗: " . $mysqli->error;
}
$mysqli->close();
?>
為了更好地複用,你也可以把它封裝成一個函數:
<?php
function fetchAllResults($mysqli, $query) {
$result = $mysqli->query($query);
$data = [];
if ($result) {
while ($row = $result->fetch_assoc()) {
$data[] = $row;
}
}
return $data;
}
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_error) {
die("連接失敗: " . $mysqli->connect_error);
}
$sql = "SELECT * FROM your_table";
$data = fetchAllResults($mysqli, $sql);
print_r($data);
$mysqli->close();
?>
安全性:請記得對外部輸入的數據使用預處理語句( prepare ) 防止SQL 注入。
性能:一次性取出大量數據可能會佔用較多內存,如果數據量大,建議分頁查詢。
錯誤處理:總是檢查$result是否為false ,避免在查詢失敗時繼續執行後續代碼。
假設你要用的接口是: