logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

Scroll
08/05/2020, by maria

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);