在PHP 中,當我們使用進行數據庫操作時,通常會用mysqli_query()執行查詢,並使用mysqli_result對象來獲取結果。如果你想把查詢結果直接轉換成對象,可以使用mysqli_result::fetch_object()方法。
這篇文章將一步步帶你了解如何使用它,並通過一個簡單的示例來演示。
fetch_object()是mysqli_result類的方法,用於從查詢結果中獲取當前行並將其作為對象返回。默認情況下,它會返回一個標準對象( stdClass ),對象的屬性名與數據庫字段名相對應。
你還可以傳入一個類名,讓方法返回指定類的實例,並把字段值賦給對象屬性。
object mysqli_result::fetch_object ([ string $class_name = "stdClass" [, array $params ]] )
$class_name :要實例化的類名,默認是stdClass 。
$params :如果指定了類名,可以傳遞構造函數參數。
假設你有一個名為users的表,結構如下:
id | name | |
---|---|---|
1 | Alice | alice@m66.net |
2 | Bob | bob@m66.net |
以下是示例代碼:
<?php
// 連接數據庫
$mysqli = new mysqli("localhost", "username", "password", "database");
// 檢查連接
if ($mysqli->connect_errno) {
echo "連接失敗: " . $mysqli->connect_error;
exit();
}
// 執行查詢
$sql = "SELECT id, name, email FROM users";
$result = $mysqli->query($sql);
if ($result) {
while ($user = $result->fetch_object()) {
echo "ID: " . $user->id . "<br>";
echo "Name: " . $user->name . "<br>";
echo "Email: " . $user->email . "<br><br>";
}
$result->free();
} else {
echo "查詢失敗: " . $mysqli->error;
}
// 關閉連接
$mysqli->close();
?>
在這個例子中,每次循環$user都是一個stdClass對象,其中包含當前行的id 、 name 、 email屬性。
你也可以讓fetch_object()返回一個特定的類對象,比如:
<?php
class User {
public $id;
public $name;
public $email;
public function display() {
echo "[$this->id] $this->name <$this->email><br>";
}
}
$sql = "SELECT id, name, email FROM users";
$result = $mysqli->query($sql);
if ($result) {
while ($user = $result->fetch_object('User')) {
$user->display();
}
$result->free();
}
?>
這樣,每次循環你都得到一個User實例,並且可以直接調用它的方法。
如果查詢結果為空, fetch_object()返回false 。
如果指定了類名,類的屬性必須公開( public ),否則不能直接賦值。
fetch_object()每次只提取一行數據,需要配合循環使用。