在 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() 每次只提取一行数据,需要配合循环使用。