【PHP8.x】SQLite3Result::fetchArray()メソッドの使い方
fetchArrayメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
fetchArrayメソッドは、SQLite3のクエリ結果セットから1行分のデータを配列として取得するために実行するメソッドです。このメソッドは、SQLite3::query()などを実行した結果として得られるSQLite3Resultオブジェクトに対して使用します。メソッドを呼び出すたびに、結果セット内のポインタが次の行へと進み、その行のデータが配列として返されます。すべての行を取得し終えた後に再度呼び出すと、falseを返します。オプションの引数$modeを渡すことで、返される配列の形式を指定することが可能です。$modeには主に3つの定数を指定できます。SQLITE3_ASSOCはカラム名をキーとする連想配列、SQLITE3_NUMは0から始まる数値をインデックスとする添字配列を返します。引数を省略した場合やSQLITE3_BOTHを指定した場合は、連想配列と添字配列の両方の形式を含む配列が返されます。この動作により、whileループなどを用いてクエリ結果を1行ずつ効率的に処理する際によく利用されます。
構文(syntax)
1<?php 2 3// インメモリデータベースに接続します。 4$db = new SQLite3(':memory:'); 5 6// テーブルを作成し、サンプルデータを挿入します。 7$db->exec('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)'); 8$db->exec('INSERT INTO users (name) VALUES ("Alice")'); 9$db->exec('INSERT INTO users (name) VALUES ("Bob")'); 10 11// クエリを実行して、結果セット(SQLite3Resultオブジェクト)を取得します。 12$result = $db->query('SELECT id, name FROM users'); 13 14// fetchArray() を使用して、結果セットから1行ずつデータを配列として取得します。 15// 引数に SQLITE3_ASSOC を指定すると、カラム名をキーとする連想配列で返されます。 16// 取得する行がなくなると false を返し、whileループが終了します。 17while ($row = $result->fetchArray(SQLITE3_ASSOC)) { 18 echo "ID: {$row['id']}, Name: {$row['name']}" . PHP_EOL; 19} 20 21// データベース接続を閉じます。 22$db->close(); 23 24?>
引数(parameters)
int $mode = SQLITE3_BOTH
- int $mode = SQLITE3_BOTH: 取得する結果の形式を指定します。
SQLITE3_NUM(数値インデックス),SQLITE3_ASSOC(連想配列), またはSQLITE3_BOTH(数値インデックスと連想配列の両方) を指定できます。デフォルトはSQLITE3_BOTHです。
戻り値(return)
array|false
SQLite3Result::fetchArray() メソッドは、クエリ結果セットの次の行を連想配列または数値添え字配列として返します。結果セットの終わりに達した場合は false を返します。
サンプルコード
PHPでSQLite3の結果を配列で取得する
1<?php 2 3// SQLiteデータベースを操作する例 4 5// データベースに接続 6try { 7 $db = new SQLite3('test.db'); 8} catch (Exception $e) { 9 die("データベース接続エラー: " . $e->getMessage()); 10} 11 12// テーブルを作成(存在しない場合) 13$db->exec('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, email TEXT)'); 14 15// データを挿入 16$db->exec("INSERT INTO users (name, email) VALUES ('John Doe', 'john.doe@example.com')"); 17$db->exec("INSERT INTO users (name, email) VALUES ('Jane Smith', 'jane.smith@example.com')"); 18 19// クエリを実行 20$result = $db->query('SELECT * FROM users'); 21 22// 結果を配列として取得 (SQLITE3_BOTH: 数値インデックスとカラム名) 23while ($row = $result->fetchArray(SQLITE3_BOTH)) { 24 echo "ID: " . $row['id'] . "\n"; // カラム名でアクセス 25 echo "Name: " . $row[1] . "\n"; // 数値インデックスでアクセス (name) 26 echo "Email: " . $row['email'] . "\n"; // カラム名でアクセス 27 echo "---\n"; 28} 29 30// データベースを閉じる 31$db->close(); 32 33?>
このサンプルコードは、PHPでSQLiteデータベースを操作し、SQLite3Result::fetchArrayメソッドを使用してクエリ結果を配列として取得する方法を示しています。
まず、SQLite3クラスを使用してデータベースに接続します。接続に失敗した場合は、エラーメッセージを表示してスクリプトを終了します。次に、execメソッドでusersテーブルが存在しない場合に作成し、サンプルデータを挿入します。
queryメソッドでSELECTクエリを実行し、その結果を$result変数に格納します。SQLite3Result::fetchArrayメソッドは、クエリ結果から1行分のデータを配列として取得するために使用されます。引数$modeは、配列の形式を指定します。サンプルではSQLITE3_BOTHを指定しており、数値インデックスとカラム名の両方でアクセスできる配列が返されます。
whileループ内で、fetchArrayメソッドを使って1行ずつデータを取得し、取得したデータを$row配列に格納します。$row['id']のようにカラム名を指定して値にアクセスしたり、$row[1]のように数値インデックスを指定して値にアクセスしたりできます。取得したID、名前、メールアドレスをそれぞれ出力しています。
fetchArrayメソッドは、取得できる行がなくなるとfalseを返します。そのため、whileループは自動的に終了します。最後に、closeメソッドでデータベース接続を閉じます。このコードは、データベースからのデータ取得と、fetchArrayメソッドの基本的な使い方を示す例となります。
SQLite3Result::fetchArray() は、クエリ結果から1行分のデータを配列として取得するメソッドです。引数 $mode で配列の形式を指定できます。SQLITE3_BOTH は数値インデックスとカラム名の両方でアクセス可能ですが、同じデータが重複して格納されるため、メモリを消費する点に注意が必要です。SQLITE3_ASSOC を指定するとカラム名のみ、SQLITE3_NUM を指定すると数値インデックスのみでアクセスできます。データベース接続エラー処理は重要です。try-catch ブロックで例外を捕捉し、適切なエラーメッセージを表示するようにしましょう。また、クエリ実行後は必ず close() メソッドでデータベース接続を閉じるようにしてください。リソースの解放を怠ると、パフォーマンスに影響を与える可能性があります。