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 :クラス名が指定されている場合、コンストラクターパラメーターを渡すことができます。
ユーザーと呼ばれるテーブルがあるとしますが、構造は次のとおりです。
id | 名前 | メール |
---|---|---|
1 | アリス | alice@m66.net |
2 | ボブ | 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();
?>
この例では、各ループ$ユーザーは、現在の行のID 、名前、電子メールの属性を含むSTDCLASSオブジェクトです。
また、 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();
}
?>
このようにして、ループするたびにユーザーインスタンスを取得し、そのメソッドを直接呼び出すことができます。
クエリの結果が空の場合、 fetch_object()がfalseを返します。
クラス名が指定されている場合、クラスの属性を公開する必要があります。そうしないと、値を直接割り当てることはできません。
fetch_object()は、一度に1列のデータのみを抽出するため、ループで使用する必要があります。