From c70ebb9a8d50a090df79906021ce737910b4418a Mon Sep 17 00:00:00 2001 From: lacatoire Date: Mon, 23 Feb 2026 13:18:29 +0100 Subject: [PATCH] =?UTF-8?q?PDO=20=E3=83=95=E3=82=A7=E3=83=83=E3=83=81?= =?UTF-8?q?=E3=83=A2=E3=83=BC=E3=83=89=E5=AE=9A=E6=95=B0=E3=81=AE=E7=BF=BB?= =?UTF-8?q?=E8=A8=B3=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit doc-en に存在するが doc-ja に欠けている reference/pdo/constants.fetch-modes.xml の日本語翻訳を追加します。 --- reference/pdo/constants.fetch-modes.xml | 1467 +++++++++++++++++++++++ 1 file changed, 1467 insertions(+) create mode 100644 reference/pdo/constants.fetch-modes.xml diff --git a/reference/pdo/constants.fetch-modes.xml b/reference/pdo/constants.fetch-modes.xml new file mode 100644 index 0000000000..08dfbd422a --- /dev/null +++ b/reference/pdo/constants.fetch-modes.xml @@ -0,0 +1,1467 @@ + + +
+ フェッチモード + + + PDO::FETCH_ORI_* カーソル定数については、 + カーソル定数 を参照ください。 + + +
+ 基本的なフェッチモード + + + + + フェッチモード + 概要 + + + + + + PDO::FETCH_DEFAULT + + + 現在のデフォルトフェッチモードを使用するための特別な値。 + + + + + PDO::FETCH_ASSOC + + + カラム名のみでインデックス付けされた配列。 + + + + + PDO::FETCH_BOTH (デフォルト) + + + カラム番号とカラム名の両方でインデックス付けされた配列。 + + + + + PDO::FETCH_NAMED + + + 重複するカラムを保持する PDO::FETCH_ASSOC の変形。 + + + + + PDO::FETCH_NUM + + + カラム番号のみでインデックス付けされた配列。 + + + + + PDO::FETCH_COLUMN + + + 単一のカラム。 + + + + + PDO::FETCH_KEY_PAIR + + + 最初のカラムでインデックス付けされたキーと値のペア。 + + + + + PDO::FETCH_FUNC + + + 戻り値を生成するために関数を使用します。 + (PDOStatement::fetchAll のみ) + + + + + PDO::FETCH_OBJ + + + 無名の (stdClass) オブジェクト。 + + + + + PDO::FETCH_CLASS + + + 指定されたクラスのオブジェクト。 + + + + + +
+ +
+ PDO::FETCH_CLASS のオプション + + + これらのモードは PDO::FETCH_CLASS + 使用時のオプションを実装するために使用されます。 + + + + + + + フェッチモード + 概要 + + + + + + PDO::FETCH_CLASSTYPE + + + 最初のカラムをクラス名として使用します。 + + + + + PDO::FETCH_PROPS_LATE + + + プロパティを設定する前にコンストラクタを呼び出します。 + + + + + PDO::FETCH_SERIALIZE + + + PHP のシリアライズされたデータを使用します。PHP 8.1.0 以降は推奨されません。 + + + + + +
+ +
+ 単一結果モード + + + 以下のモードは PDOStatement::fetchAll + では使用できません。 + + + + + + + フェッチモード + 概要 + + + + + + PDO::FETCH_BOUND + + + 指定した変数に値をバインドします。 + + + + + PDO::FETCH_INTO + + + 既存のオブジェクトを更新します。 + + + + + PDO::FETCH_LAZY + + + 配列風およびオブジェクト風のアクセスのための + PDORow による遅延フェッチ。 + + + + + +
+ +
+ + <methodname>PDOStatement::fetchAll</methodname> 用の特殊な動作フラグ + + + + 以下の複数結果用の特殊モードは + PDOStatement::fetchAll でのみ動作し、 + 一部の他のフェッチモードとは組み合わせて使用できません。 + 詳細については完全なドキュメントを確認してください。 + + + + + + + フェッチモード + 概要 + + + + + + PDO::FETCH_GROUP + + + 結果は最初のカラムでグループ化されます。 + + + + + PDO::FETCH_UNIQUE + + + 結果は最初のカラムで (一意に) インデックス付けされます。 + + + + + +
+ +
+ 重複するカラム名の処理 + + 結果に同じ名前のカラムが複数含まれる場合があります。 + たとえば、同じカラム名を持つ 2 つのテーブルを結合する場合などです。 + + + PHP の配列やオブジェクトなどの構造は、同じ名前の複数のキーや + プロパティをサポートしていないため、返される配列やオブジェクトには + 同じ名前を使用する値のうち 1 つだけが含まれます。 + + + 重複する名前に対してどの値が返されるかは未定義と考えるべきです。 + + + この問題を回避するには、エイリアスを使用してカラムに明示的に名前を付けてください。 + 例: + + + + + + + + PDO::FETCH_NAMED、 + PDO::ATTR_FETCH_TABLE_NAMES および + PDO::ATTR_FETCH_CATALOG_NAMES も参照ください。 + +
+ +
+ デフォルトのフェッチモードの設定 + + PDO::__construct または + PDO::setAttribute で + PDO::ATTR_DEFAULT_FETCH_MODE + を使用して、すべてのクエリに対するデフォルトのフェッチモードを設定できます。 + + + 特定のステートメントに対するデフォルトのフェッチモードは、 + PDOStatement::setFetchMode を使用して設定できます。 + これはプリペアドステートメントの再利用や (&foreach; を使用した) + イテレーションに影響します。 + + + + PDOStatement::setAttribute はデフォルトのフェッチモードの + 設定には使用できません。ドライバ固有の属性のみを受け入れ、 + 認識されない属性は警告なく無視されます。 + + +
+ +
+ PDO::FETCH_DEFAULT (<type>int</type>) + + PHP 8.0.7 以降で利用可能です。 + + + これは PDOStatement + に対する現在のデフォルトのフェッチモードを使用する特別な値です。 + PDO::ATTR_STATEMENT_CLASS と共に使用するために + PDOStatement + を拡張する際のメソッドパラメータのデフォルト値として特に有用です。 + + + この値は PDO::ATTR_DEFAULT_FETCH_MODE + と共には使用できません。 + +
+ +
+ PDO::FETCH_ASSOC (<type>int</type>) + + PDO::FETCH_ASSOC はカラム名のみでインデックス付けされた + 配列を返します。 + + + +query("SELECT userid, name, country FROM users"); +$row = $stmt->fetch(\PDO::FETCH_ASSOC); +print_r($row); +]]> + + &example.outputs; + + 104 + [name] => Chris + [country] => Ukraine +) +]]> + + +
+ +
+ PDO::FETCH_BOTH (<type>int</type>) + + これはデフォルトのフェッチモードです。 + + + PDO::FETCH_BOTH はカラム番号とカラム名の両方で + インデックス付けされた配列を返します。これは、結果行ごとに + すべての返される値が重複することを意味します。 + + + カラム番号は 0 から始まり、クエリ内の結果カラムの順序によって決まります。 + テーブルでカラムが定義されている順序などではありません。 + + + + 数値カラムインデックスの使用は推奨されません。 + クエリが変更された場合や、SELECT * + を使用している場合にテーブルスキーマが変更されると、 + インデックスが変わる可能性があるためです。 + + + + + 複数の返されるカラムが同じ名前を使用する場合、 + 名前でインデックス付けされたエントリの数は + 番号でインデックス付けされたエントリの数と一致しないことがあります。 + + + + +query("SELECT userid, name, country FROM users"); +$row = $stmt->fetch(\PDO::FETCH_BOTH); +print_r($row); +]]> + + &example.outputs; + + 104, + [0] => 104, + [name] => Chris, + [1] => Chris, + [country] => Ukraine, + [2] => Ukraine +) +]]> + + +
+ +
+ PDO::FETCH_NAMED (<type>int</type>) + + PDO::FETCH_NAMED は + PDO::FETCH_ASSOC と同じ形式で結果を返しますが、 + 複数のカラムが同じ名前を使用する場合、すべての値がリストとして返されます。 + + + 重複するカラム名の処理と代替方法についての詳細は、上記の + 重複する名前の処理に関する + セクション を参照ください。 + + + 重複した値が返される順序は未定義と考えるべきです。 + 各値がどこから来たのかを知る方法はありません。 + + + +query( + "SELECT users.*, referrer.name + FROM users + LEFT JOIN users AS referrer ON users.referred_by = referrer.userid + WHERE userid = 109" +); +$row = $stmt->fetch(\PDO::FETCH_NUM); +print_r($row); +]]> + + &example.outputs; + + 109 + [name] => Array + ( + [0] => Toni + [1] => Chris + ) + [country] => Germany + [referred_by] = 104 +) +]]> + + +
+ +
+ PDO::FETCH_NUM (<type>int</type>) + + PDO::FETCH_NUM はカラム番号のみでインデックス付けされた + 配列を返します。カラム番号は 0 から始まり、 + クエリ内の結果カラムの順序によって決まります。 + テーブルでカラムが定義されている順序などではありません。 + + + + 数値カラムインデックスの使用は推奨されません。 + クエリが変更された場合や、SELECT * + を使用している場合にテーブルスキーマが変更されると、 + インデックスが変わる可能性があるためです。 + + + + +query("SELECT userid, name, country FROM users"); +$row = $stmt->fetch(\PDO::FETCH_NUM); +print_r($row); +]]> + + &example.outputs; + + 104 + [1] => Chris + [2] => Ukraine +) +]]> + + +
+ +
+ PDO::FETCH_COLUMN (<type>int</type>) + + PDO::FETCH_COLUMN は単一のカラムの値を返します。 + PDOStatement::setFetchMode または + PDOStatement::fetchAll + の第二引数を使用して、どのカラムを返すかを指定します。 + + + 指定されたカラムが存在しない場合、 + ValueError がスローされます。 + + + +query("SELECT name, country FROM users LIMIT 3"); +$row = $stmt->fetchAll(\PDO::FETCH_COLUMN); +print_r($row); + +$stmt = $pdo->query("SELECT name, country FROM users LIMIT 3"); +$row = $stmt->fetchAll(\PDO::FETCH_COLUMN, 1); +print_r($row); +]]> + + &example.outputs; + + Chris + [1] => Jamie + [2] => Robin +) + +Array +( + [0] => Ukraine + [1] => England + [2] => Germany +) +]]> + + +
+ +
+ PDO::FETCH_KEY_PAIR (<type>int</type>) + + PDO::FETCH_KEY_PAIR は最初のカラムでインデックス付けされた + 値のペアを返します。結果には 2 つのカラムのみが含まれている必要があります。 + このフェッチモードは PDOStatement::fetchAll + でのみ意味があります。 + + + + 最初のカラムが一意でない場合、値が失われます。 + どの値が失われるかは未定義と考えるべきです。 + + + + +query("SELECT name, country FROM users LIMIT 3"); +$row = $stmt->fetchAll(\PDO::FETCH_KEY_PAIR); +print_r($row); +]]> + + &example.outputs; + + Ukraine + [Jamie] => England + [Robin] => Germany +) +]]> + + +
+ +
+ PDO::FETCH_FUNC (<type>int</type>) + + 返される値を生成するための関数を指定します。このモードは + PDOStatement::fetchAll でのみ使用できます。 + + + 関数は値をパラメータとして受け取ります。 + 指定された値がどのカラム名に関連付けられているかを取得する方法はありません。 + クエリ内のカラムの順序が関数のパラメータの順序と一致していることを + 確認することが重要です。 + + + + PDO::FETCH_GROUP および + PDO::FETCH_UNIQUE + の効果は、関数が呼び出される前に結果に適用されます。 + + + + + $col1, + 'col2' => strtoupper($col2), + 'col3' => $col3, + 'customKey' => 'customValue', + ]; +} + +$stmt = $pdo->query("SELECT userid, name, country FROM users LIMIT 3"); +$row = $stmt->fetchAll(\PDO::FETCH_FUNC, valueCreator(...)); +print_r($row); +]]> + + &example.outputs; + + Array + ( + [col1] => 104 + [col2] => SAM + [col3] => Ukraine + [customKey] => customValue + ) + + [1] => Array + ( + [col1] => 105 + [col2] => JAMIE + [col3] => England + [customKey] => customValue + ) + + [2] => Array + ( + [col1] => 107 + [col2] => ROBIN + [col3] => Germany + [customKey] => customValue + ) + +) +]]> + + +
+ +
+ PDO::FETCH_OBJ (<type>int</type>) + + PDO::FETCH_OBJstdClass + オブジェクトを返します。 + + + PDOStatement::fetchObject および + PDO::FETCH_CLASS も参照ください。 + + + +query("SELECT userid, name, country FROM users"); +$row = $stmt->fetch(\PDO::FETCH_OBJ); +print_r($row); +]]> + + &example.outputs; + + 104 + [name] => Chris + [country] => Ukraine +) +]]> + + +
+ +
+ PDO::FETCH_CLASS (<type>int</type>) + + 指定されたクラスのオブジェクトを返します。追加の動作については + オプションフラグ + を参照ください。 + + + 返されるカラム名と一致するプロパティが存在しない場合、 + そのプロパティは動的に宣言されます。この動作は推奨されず、 + PHP 9.0 からはエラーが発生します。 + + + PDOStatement::fetchObject も参照ください。 + + + +name) ? 'Yes' : 'No') . "\n"; + } +} + +$stmt = $db->query( + "SELECT userid, name, country, referred_by_userid FROM users" +); +$stmt->setFetchMode(PDO::FETCH_CLASS, TestEntity::class); +$result = $stmt->fetch(); +var_dump($result); +]]> + + &example.outputs.similar; + + + int(104) + ["name"]=> + string(5) "Chris" + ["country"]=> + string(7) "Ukraine" + ["referred_by_userid"]=> + NULL +} +]]> + + +
+ +
+ PDO::FETCH_CLASSTYPE (<type>int</type>) + + このフェッチモードは PDO::FETCH_CLASS + (および その他のオプション) + と組み合わせてのみ使用できます。 + + + このフェッチモードが使用されると、PDO は返される最初のカラムを + 返すクラスの名前として使用します。 + + + 指定されたクラスが見つからない場合、警告やエラーなしに + stdClass オブジェクトが返されます。 + + + +name) ? 'Yes' : 'No') . "\n"; + } +} + +$stmt = $db->query( + "SELECT 'TestEntity', userid, name, country, referred_by_userid FROM users" +); +$stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE); +$result = $stmt->fetch(); +var_dump($result); +]]> + + &example.outputs.similar; + + + int(104) + ["name"]=> + string(5) "Chris" + ["country"]=> + string(7) "Ukraine" + ["referred_by_userid"]=> + NULL +} +]]> + + +
+ +
+ PDO::FETCH_PROPS_LATE (<type>int</type>) + + このフェッチモードは PDO::FETCH_CLASS + (および その他のオプション) + と組み合わせてのみ使用できます。 + + + このフェッチモードが使用されると、プロパティが設定される前に + コンストラクタが呼び出されます。 + + + +name) ? 'Yes' : 'No') . "\n"; + } +} + +$stmt = $db->query( + "SELECT userid, name, country, referred_by_userid FROM users" +); +$stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, TestEntity::class); +$result = $stmt->fetch(); +var_dump($result); +]]> + + &example.outputs.similar; + + + int(104) + ["name"]=> + string(5) "Chris" + ["country"]=> + string(7) "Ukraine" + ["referred_by_userid"]=> + NULL +} +]]> + + +
+ +
+ PDO::FETCH_SERIALIZE (<type>int</type>) + &warn.deprecated.feature-8-1-0; + + このフェッチモードは PDO::FETCH_CLASS + (および その他のオプション) + と組み合わせてのみ使用できます。 + + + このフェッチモードが使用される場合、指定されたクラスは + Serializable でなければなりません。 + + + + この機能は (serialize による) + 完全なシリアライズされたオブジェクトを含む文字列をサポートしていません。 + + + + + このフェッチモードはコンストラクタを呼び出しません。 + + + + +name) ? 'Yes' : 'No') . "\n"; + } + + public function serialize() + { + return join( + "|", + [$this->userid, $this->name, $this->country, $this->referred_by_userid] + ); + } + + public function unserialize(string $data) + { + $parts = explode("|", $data); + $this->userid = (int) $parts[0]; + $this->name = $parts[1]; + $this->country = $parts[2]; + + $refId = $parts[3]; + $this->referred_by_userid = ($refId === "" ? null : (int) $refId); + } +} + +print "Set up record (constructor called manually):\n"; +$db->exec( + "CREATE TABLE serialize ( + sdata TEXT + )" +); + +$origObj = new TestEntity(); +$origObj->userid = 200; +$origObj->name = 'Seri'; +$origObj->country = 'Syria'; +$origObj->referred_by_userid = null; + +$insert = $db->prepare("INSERT INTO serialize (sdata) VALUES (:sdata)"); +$insert->execute(['sdata' => $origObj->serialize()]); + +print "\nRetrieve result:\n"; +$query = "SELECT sdata FROM serialize"; +$stmt = $db->query($query); +// 注意: コンストラクタは呼び出されません! +$stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_SERIALIZE, TestEntity::class); +$result = $stmt->fetch(); +var_dump($result); +]]> + + &example.outputs.similar; + + + int(200) + ["name"]=> + string(4) "Seri" + ["country"]=> + string(5) "Syria" + ["referred_by_userid"]=> + NULL +} +]]> + + +
+ +
+ PDO::FETCH_BOUND (<type>int</type>) + + このフェッチモードは PDOStatement::fetchAll + では使用できません。 + + + このフェッチモードは結果を直接返すのではなく、 + PDOStatement::bindColumn + で指定された変数に値をバインドします。 + 呼び出されたフェッチメソッドは &true; を返します。 + + + + プリペアドステートメントを使用する場合、正しく動作させるには + クエリが実行された後に変数をバインドする必要があります。 + + + +prepare($query); +$stmt->execute(); + +$stmt->bindColumn('userid', $userId); +$stmt->bindColumn('name', $name); +$stmt->bindColumn('country', $country); +// 重複するカラム名を解決するためにカラム位置でバインドする +// クエリが変更された場合に壊れないようにするには、SQL エイリアスを使用してください +// 例: referrer.name AS referrer_name +$stmt->bindColumn(4, $referrerName); + +while ($stmt->fetch(\PDO::FETCH_BOUND)) { + print join("\t", [$userId, $name, $country, ($referrerName ?? 'NULL')]) . "\n"; +} +]]> + + &example.outputs; + + + +
+ +
+ PDO::FETCH_INTO (<type>int</type>) + + このフェッチモードは PDOStatement::fetchAll + では使用できません。 + + + このフェッチモードは指定されたオブジェクトのプロパティを更新します。 + 成功した場合、オブジェクトが返されます。 + + + 返されるカラム名と一致するプロパティが存在しない場合、 + そのプロパティは動的に宣言されます。この動作は推奨されず、 + PHP 9.0 からはエラーが発生します。 + + + プロパティは public でなければならず、 + readonly にはできません。 + + + + 各レコードの取得間で + PDOStatement::setFetchMode + を使用せずに、更新対象のオブジェクトを変更する方法はありません。 + + + + +setFetchMode(\PDO::FETCH_INTO, $obj); + +$stmt = $db->query("SELECT userid, name, country, referred_by_userid FROM users"); +$result = $stmt->fetch(); +var_dump($result); +]]> + + &example.outputs.similar; + + + int(104) + ["name"]=> + string(5) "Chris" + ["country"]=> + string(7) "Ukraine" + ["referred_by_userid"]=> + NULL +} +]]> + + +
+ +
+ PDO::FETCH_LAZY (<type>int</type>) + + このフェッチモードは PDOStatement::fetchAll + では使用できません。 + + + このフェッチモードは PDORow オブジェクトを返し、 + 値への配列風およびオブジェクト風のアクセスを提供します + (つまり、PDO::FETCH_BOTH と + PDO::FETCH_OBJ の動作を組み合わせたもの)。 + 値は遅延的に取得されます。 + + + これは、データベースサーバー上のバッファリングされていない結果への + (PHP 側で) メモリ効率の良いアクセスを提供できます。 + PDO が結果にクライアント側のバッファリングを使用するかどうかは、 + 使用されるデータベース固有のドライバ (およびその設定) に依存します。 + + + + PDORow は、定義されていないプロパティやキーに + アクセスした場合、エラーや警告なしに NULL を返します。 + これにより、タイプミスや期待されるデータを返さないクエリなどのエラーを + 発見してデバッグすることが難しくなる可能性があります。 + + + + + 返される PDORow オブジェクトは、 + 結果が取得されるたびに更新されます。 + + + +query("SELECT userid, name, country, referred_by_userid FROM users"); +$result = $stmt->fetch(\PDO::FETCH_LAZY); + +print "ID: ". $result[0] ."\n"; +print "Name: {$result->name}\n"; +print "Country: " . $result['country'] ."\n"; +// NULL を返します。警告やエラーは発生しません。 +print "Does not exist: " . var_export($result->does_not_exist, true) . "\n"; + +$differentResult = $stmt->fetch(\PDO::FETCH_LAZY); +// 以前取得した PDORow は、新しく取得された結果を指すようになります +print "ID: ". $result[0] ."\n"; + +]]> + + &example.outputs; + + + +
+ +
+ PDO::FETCH_GROUP (<type>int</type>) + + PDO::FETCH_GROUP は、(一意でない) カラムで + インデックス付けされた連想配列のリストを返します。 + このフェッチモードは PDOStatement::fetchAll + でのみ動作します。 + + + PDO::FETCH_UNIQUE と組み合わせた場合、 + 両方のモードが同じカラムを使用するため、 + これらのモードの組み合わせは無意味になります。 + + + このフェッチは + PDO::FETCH_ASSOCPDO::FETCH_BOTH、 + PDO::FETCH_NAMEDPDO::FETCH_NUM、 + PDO::FETCH_COLUMN または + PDO::FETCH_FUNC のいずれかと組み合わせる必要があります。 + + + 上記のリストのフェッチモードが指定されない場合、 + PDOStatement + の現在のデフォルトのフェッチモードが使用されます。 + + + +query("SELECT country, userid, name FROM users"); +$row = $stmt->fetchAll(\PDO::FETCH_GROUP | \PDO::FETCH_ASSOC); +print_r($row); +]]> + + &example.outputs; + + Array + ( + [0] => Array + ( + [userid] => 104 + [name] => Chris + ) + + [1] => Array + ( + [userid] => 108 + [name] => Sean + ) + + ) + [England] => Array + ( + [0] => Array + ( + [userid] => 105 + [name] => Jamie + ) + + ) + + [Germany] => Array + ( + [0] => Array + ( + [userid] => 107 + [name] => Robin + ) + + [1] => Array + ( + [userid] => 109 + [name] => Toni + ) + ) +) +]]> + + + + 上記の例では、最初のカラムが各行の配列から省略され、 + キーとしてのみ利用可能であることに注意してください。 + 次の例のようにカラムを繰り返すことで含めることができます: + + + +query("SELECT country, userid, name, country FROM users"); +$row = $stmt->fetchAll(\PDO::FETCH_GROUP | \PDO::FETCH_ASSOC); +print_r($row); +]]> + + &example.outputs; + + Array + ( + [0] => Array + ( + [userid] => 104 + [name] => Chris + [country] => Ukraine + ) + + [1] => Array + ( + [userid] => 108 + [name] => Sean + [country] => Ukraine + ) + + ) + [England] => Array + ( + [0] => Array + ( + [userid] => 105 + [name] => Jamie + [country] => England + ) + + ) + + [Germany] => Array + ( + [0] => Array + ( + [userid] => 107 + [name] => Robin + [country] => Germany + ) + + [1] => Array + ( + [userid] => 109 + [name] => Toni + [country] => Germany + ) + ) +) +]]> + + +
+ +
+ PDO::FETCH_UNIQUE (<type>int</type>) + + PDO::FETCH_UNIQUE は最初のカラムを使用してレコードを + インデックス付けし、インデックス値ごとに 1 レコードを返します。 + このフェッチモードは PDOStatement::fetchAll + でのみ動作します。 + + + PDO::FETCH_GROUP と組み合わせた場合、 + 両方のモードが同じカラムを使用するため、 + これらのモードの組み合わせは無意味になります。 + + + このフェッチは + PDO::FETCH_ASSOCPDO::FETCH_BOTH、 + PDO::FETCH_NAMEDPDO::FETCH_NUM、 + PDO::FETCH_COLUMN または + PDO::FETCH_FUNC のいずれかと組み合わせる必要があります。 + + + 上記のリストのフェッチモードが指定されない場合、 + PDOStatement + の現在のデフォルトのフェッチモードが使用されます。 + + + 一意であることがわかっているカラム (レコード ID など) と共に使用すると、 + このモードはその値でインデックス付けされた結果を素早く返す機能を提供します。 + + + + 最初のカラムが一意でない場合、値が失われます。 + どの値が失われるかは未定義と考えるべきです。 + + + + + レコードのフィルタリングは、可能な限り SQL で行うべきです。 + データベースはインデックスを使用してこのプロセスを最適化し、 + 必要なレコードのみを返します。 + 必要以上のレコードをデータベースから取得すると、 + 大きな結果セットの場合にメモリ使用量とクエリ時間が大幅に増加する可能性があります。 + + + + +query("SELECT userid, name, country FROM users LIMIT 3"); +$row = $stmt->fetchAll(\PDO::FETCH_UNIQUE | \PDO::FETCH_ASSOC); +print_r($row); +]]> + + &example.outputs; + + Array + ( + [name] => Chris + [country] => Ukraine + ) + + [105] => Array + ( + [name] => Jamie + [country] => England + ) + + [107] => Array + ( + [name] => Robin + [country] => Germany + ) + +) +]]> + + + + 上記の例では、最初のカラムが各行の配列から省略され、 + キーとしてのみ利用可能であることに注意してください。 + 次の例のようにカラムを繰り返すことで含めることができます: + + + +query("SELECT userid, userid, name, country FROM users LIMIT 3"); +$row = $stmt->fetchAll(\PDO::FETCH_UNIQUE | \PDO::FETCH_ASSOC); +print_r($row); +]]> + + &example.outputs; + + Array + ( + [userid] => 104 + [name] => Chris + [country] => Ukraine + ) + + [105] => Array + ( + [userid] => 105 + [name] => Jamie + [country] => England + ) + + [107] => Array + ( + [userid] => 107 + [name] => Robin + [country] => Germany + ) + +) +]]> + + +
+ +
+