結果セット
SELECTクエリは常に、0件以上のレコードを含む結果セットオブジェクトを返します。使用ケースに応じて、この結果セットからデータを取得する方法はいくつかあります。取得モードを変更しない限り(setFetchModeを参照)、レコードはデフォルトでオブジェクトとして取得されます。
最も一般的なケースは、foreach()ループで結果セットを反復処理することです。
// Static query:
$result = $connection->query("SELECT field1, field2 FROM {mytable}");
foreach ($result as $record) {
// Do something with each $record
}
// Dynamic query
$result = $query->execute();
foreach ($result as $record) {
// Do something with each $record.
}
ただし、結果の用途に応じて、レコードを取得する他の方法もいくつかあります。
次のレコードを明示的に取得するには、次を使用します:
$record = $result->fetch(); // Use the default fetch mode.
$record = $result->fetchObject(); // Fetch as a stdClass object.
$record = $result->fetchAssoc(); // Fetch as an associative array.
次のレコードがない場合は、FALSEが返されます。通常、fetchObject()とfetchAssoc()の方が自己文書化的であるため、fetch()よりも優先すべきです。PDOがサポートする他の取得モードを使用する必要がある場合は、fetch()を使用します。
結果セットから1つのフィールドだけを取得するには、次を使用します:
$record = $result->fetchField($column_index);
$column_indexのデフォルト値は、最初のフィールドでは0です。
DELETE、INSERT、またはUPDATEステートメントによって返される行数をカウントするには、次を使用します:
$number_of_rows = $result->rowCount();
SELECTステートメントによって返される行数をカウントするには、次を使用します:
$number_of_rows = $connection->select('mytable')->countQuery()->execute()->fetchField();
すべてのレコードを一度に1つの配列に取得するには、次のいずれかを使用します:
// Retrieve all records into an indexed array of stdClass objects.
$result->fetchAll();
// Retrieve all records into an associative array keyed by the field in the result specified.
$result->fetchAllAssoc($field);
// Retrieve a 2-column result set as an associative array of field 0 => field 1.
$result->fetchAllKeyed();
// You can also specify which two fields to use by specifying the column numbers for each field
$result->fetchAllKeyed(0,2); // would be field 0 => field 2
$result->fetchAllKeyed(1,0); // would be field 1 => field 0
// If you need an array where keys and values contain the same field (e.g. for creating a 'checkboxes' form element), the following is a perfectly valid method:
$result->fetchAllKeyed(0,0); // would be field 0 => field 0, e.g. [article] => [article]
// Retrieve a 1-column result set as one single array.
$result->fetchCol();
// Column number can be specified otherwise defaults to first column
$result->fetchCol($column_index);
fetchAll()とfetchAllAssoc()は、デフォルトではクエリで設定された取得モード(数値配列、連想配列、またはオブジェクト)を使用して取得することに注意してください。これは、新しい取得モード定数を渡すことで変更できます。fetchAll()では最初のパラメーター、fetchAllAssoc()では2番目のパラメーターです。例:
// Get an array of arrays keyed on the field 'id'.
$result->fetchAllAssoc('id', PDO::FETCH_ASSOC);
// Get an array of arrays with both numeric and associative keys.
$result->fetchAll(PDO::FETCH_BOTH);
PHPは返されたオブジェクトのメソッド呼び出しのチェーンをサポートしているため、$result変数が完全に省略されることがよくあります。例:
// Get an associative array of ids to titles.
$examples = $connection->query("SELECT id, title FROM {mytable}")->fetchAllKeyed();
// Get a single record out of the database.
$myobj = $connection->query("SELECT * FROM {mytable} WHERE example = :example", [':example' => $example])->fetchObject();
// Get a single value out of the database.
$myval = $connection->query("SELECT example FROM {mytable} WHERE id = :id", [':id' => $id])->fetchField();
[1, 2, 3, 4, 5]のような単純な配列が必要な場合は、[1=>1, 2=>2, 3=>3, 4=>4, 5=>5]のようなものを受け入れる必要があります。これは次を使用して取得できます
$ids = $connection->query("SELECT id FROM {example}")->fetchAllKeyed(0,0);