PHPとMySQLを使用してアプリケーションを開発する場合、 MySQLIを使用してデータベースクエリを実行することがよくあります。 Selectステートメントを実行した後、 mysqli_query()はmysqli_resultオブジェクトを返しますが、このオブジェクトは直接利用可能な配列形式ではありません。データをより簡単に処理するには、通常、クエリの結果を2次元配列に完全に変換する必要があります。
以下は特定の実装方法です。
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の以前のバージョンと互換性がある場合は、時間のループを使用することをお勧めします。
<?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();
?>
セキュリティ:SQL注入を防ぐために、外部入力データに前処理ステートメント(準備)を使用することを忘れないでください。
パフォーマンス:一度に大量のデータを取り出すと、多くのメモリが得られる場合があります。データボリュームが大きい場合は、クエリのページを組み合わせることをお勧めします。
エラー処理:クエリが失敗したときに$ resultがfalseであるかどうかを常に確認して、後続のコードを実行し続けることを避けます。
使用するインターフェイスが次のとおりです。