【PHP8.x】PDO::FETCH_DEFAULT定数の使い方
FETCH_DEFAULT定数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
PDO::FETCH_DEFAULT定数は、PHPのPDO(PHP Data Objects)拡張機能において、データベースから取得した結果セットのデフォルトのフェッチモードを表す定数です。PDOは、さまざまなデータベースに統一されたインターフェースを提供するクラスであり、この定数は、データベースからデータを読み込むPDOStatement::fetch()やPDOStatement::fetchAll()といったメソッドが、どのような形式でデータを返すべきかを指定する「フェッチモード」のうち、デフォルトの挙動を選択するために利用されます。
具体的には、この定数をフェッチモードの引数として指定すると、現在のPDOオブジェクトまたはPDOStatementオブジェクトにすでに設定されているフェッチモードが適用されます。これは、PDO::setAttribute()メソッドやPDOStatement::setFetchMode()メソッドで明示的に設定されたフェッチモード、あるいはPDOオブジェクトが初期化された際のデフォルトのフェッチモード(通常は数値添字配列と連想配列の両方でアクセスできる形式)を意味します。
プログラマが直接fetch()メソッドなどにこの定数を指定することは稀で、通常はフェッチモードの引数を省略した場合と同じ挙動になります。しかし、明示的に「現在設定されているデフォルトのモードを使う」という意図を示す場合に概念的に使用されることがあります。この定数自体が特定のデータ形式(例:連想配列やオブジェクト)を直接指定するものではなく、設定済みのデフォルトモードへの参照として機能する点が特徴です。
構文(syntax)
1<?php 2 3// データベース接続オブジェクトを準備します (実際の接続情報に置き換えてください) 4$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8'; 5$username = 'your_user'; 6$password = 'your_password'; 7$pdo = new PDO($dsn, $username, $password); 8 9// PDOオブジェクトのデフォルトのフェッチモードを設定します(例: 連想配列として結果を取得) 10$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 11 12// SQLクエリを実行し、PDOStatementオブジェクトを取得します 13$stmt = $pdo->query('SELECT id, name FROM users WHERE id = 1'); 14 15// PDO::FETCH_DEFAULT を使用して結果を取得します 16// これにより、上記で PDO::ATTR_DEFAULT_FETCH_MODE に設定したフェッチモード(PDO::FETCH_ASSOC)が適用されます 17$row = $stmt->fetch(PDO::FETCH_DEFAULT); 18 19// $row は ['id' => 1, 'name' => 'ユーザー名'] のような連想配列になります 20 21?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
int
PDO::FETCH_DEFAULTは、PDOStatement::fetch()メソッドのデフォルトのフェッチモードを指定する定数です。この定数は、結果セットから1行を取得する際の返り値の型を、PDO::FETCH_BOTHとして扱います。
サンプルコード
PHP PDO::ATTR_DEFAULT_FETCH_MODE を PDO::FETCH_DEFAULT でリセットする
1<?php 2 3/** 4 * PDO::FETCH_DEFAULT 定数と PDO::ATTR_DEFAULT_FETCH_MODE 属性の使用例。 5 * 6 * この関数は、PDO 接続のデフォルトフェッチモードを設定し、 7 * その後に PDO::FETCH_DEFAULT を使用してデフォルト設定にリセットする手順を示します。 8 * 9 * PDO::FETCH_DEFAULT は、PHP 8.0 以降で PDO::ATTR_DEFAULT_FETCH_MODE を 10 * その既定値 (通常は PDO::FETCH_BOTH) にリセットするために使用されます。 11 * FETCH_DEFAULT 定数自体は単なる整数値です。 12 */ 13function demonstratePdoFetchDefault(): void 14{ 15 // SQLite インメモリデータベースを使用し、単体で動作可能なPDO接続を作成します。 16 // 実際のアプリケーションでは、適切なDSN (データソース名) を使用してください。 17 $dsn = 'sqlite::memory:'; 18 $user = null; // SQLiteでは通常不要 19 $password = null; // SQLiteでは通常不要 20 21 try { 22 // PDO インスタンスを作成し、エラーモードを設定します。 23 // PDO::ERRMODE_EXCEPTION は、エラー発生時に例外をスローするようにします。 24 $pdo = new PDO($dsn, $user, $password, [ 25 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 26 ]); 27 28 echo "--- 初期設定とデータ準備 ---\n"; 29 30 // サンプルテーブルを作成します。 31 $pdo->exec(" 32 CREATE TABLE IF NOT EXISTS users ( 33 id INTEGER PRIMARY KEY, 34 name TEXT NOT NULL, 35 email TEXT NOT NULL 36 ); 37 "); 38 39 // サンプルデータを挿入します。 40 $pdo->exec("INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');"); 41 $pdo->exec("INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com');"); 42 43 // SQLクエリを準備します。 44 $stmt = $pdo->prepare("SELECT id, name, email FROM users"); 45 46 echo "\n--- PDO::ATTR_DEFAULT_FETCH_MODE を PDO::FETCH_ASSOC に設定 ---\n"; 47 // デフォルトのフェッチモードを連想配列 (キーがカラム名) に設定します。 48 $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 49 echo "現在のデフォルトフェッチモード: PDO::FETCH_ASSOC\n"; 50 51 // 設定されたフェッチモードでデータを取得します。 52 $stmt->execute(); 53 $resultsAssoc = $stmt->fetchAll(); 54 55 echo "PDO::FETCH_ASSOC でフェッチされたデータ:\n"; 56 print_r($resultsAssoc); 57 58 echo "\n--- PDO::ATTR_DEFAULT_FETCH_MODE を PDO::FETCH_DEFAULT でリセット ---\n"; 59 // PDO::FETCH_DEFAULT を使用して、デフォルトのフェッチモードを 60 // その既定値 (通常は PDO::FETCH_BOTH) にリセットします。 61 $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_DEFAULT); 62 echo "現在のデフォルトフェッチモードを PDO::FETCH_DEFAULT でリセット (通常は PDO::FETCH_BOTH に戻る)\n"; 63 64 // デフォルトモードがリセットされたことを確認するため、再度データを取得します。 65 $stmt->execute(); 66 $resultsDefault = $stmt->fetchAll(); 67 68 echo "PDO::FETCH_DEFAULT でリセット後のフェッチされたデータ (通常は PDO::FETCH_BOTH):\n"; 69 print_r($resultsDefault); 70 71 echo "\n--- PDO::FETCH_DEFAULT 定数の値を確認 ---\n"; 72 // PDO::FETCH_DEFAULT 定数自体は単なる整数値です。 73 echo "PDO::FETCH_DEFAULT の値: " . PDO::FETCH_DEFAULT . "\n"; 74 75 } catch (PDOException $e) { 76 // データベース接続やクエリ実行に関するエラーを捕捉します。 77 echo "データベースエラーが発生しました: " . $e->getMessage() . "\n"; 78 exit(1); // エラーコードを返して終了 79 } catch (Exception $e) { 80 // PDOException以外の予期せぬエラーを捕捉します。 81 echo "予期せぬエラーが発生しました: " . $e->getMessage() . "\n"; 82 exit(1); // エラーコードを返して終了 83 } finally { 84 // PDOオブジェクトをnullに設定することで、データベース接続を閉じます。 85 // スクリプト終了時にも自動的に閉じられますが、明示的なクローズは良い習慣です。 86 $pdo = null; 87 echo "\n--- 処理完了 ---\n"; 88 } 89} 90 91// 上記の関数を実行して、PDO::FETCH_DEFAULT の動作を確認します。 92demonstratePdoFetchDefault();
PHPのPDO::FETCH_DEFAULTは、PHP 8.0以降で利用可能な定数です。この定数は、データベースからデータを取得する際のデフォルト形式(フェッチモード)を設定するPDO::ATTR_DEFAULT_FETCH_MODE属性を、その既定値(通常はPDO::FETCH_BOTH、つまり連想配列と数値添字配列の両方でデータを取得する形式)にリセットするために使用されます。この定数自体は引数を取らず、整数値を返します。
サンプルコードでは、まずPDO接続を確立し、サンプルのテーブルとデータを準備します。次に、PDO::ATTR_DEFAULT_FETCH_MODE属性をPDO::FETCH_ASSOC(カラム名をキーとする連想配列形式)に設定してデータを取得し、その結果を表示します。その後、PDO::setAttributeメソッドでPDO::ATTR_DEFAULT_FETCH_MODEにPDO::FETCH_DEFAULTを設定することで、フェッチモードを既定値へとリセットし、再度データを取得してその結果を表示します。これにより、リセット後のデータの取得形式が異なることを確認できます。最後に、PDO::FETCH_DEFAULT定数自体の整数値を出力しています。この定数を使用することで、デフォルトのフェッチモードを簡単に初期状態に戻すことができ、コードの柔軟性が向上します。
PDO::FETCH_DEFAULTは、データベースからのデータ取得方法(フェッチモード)をデフォルト設定にリセットするための特別な定数です。これ自体が特定のフェッチモードを指定するわけではありません。通常、リセット後のデフォルトは連想配列と数値添字配列の両方で取得するPDO::FETCH_BOTHに戻りますが、環境によっては異なる場合もありますので、ご自身の環境で動作を確認することをおすすめします。この定数はPHP 8.0以降で利用可能です。サンプルコードでは、エラー発生時に例外を捕捉するtry-catchブロックと、データベース接続を確実に閉じるfinallyブロックを使用しており、これは安全なデータベース操作の基本的なプラクティスです。実際のシステムでは、インメモリデータベースではなく適切なデータソース名(DSN)を設定してください。
PDO::FETCH_DEFAULT でデフォルトフェッチモードを取得する
1<?php 2 3/** 4 * PDO::FETCH_DEFAULT 定数の使用例 5 * 6 * この定数は、PDOStatement::fetch() や PDOStatement::fetchAll() メソッドの引数として使用され、 7 * そのステートメントオブジェクトまたはPDOオブジェクトに設定された「デフォルトのフェッチモード」を適用することを示します。 8 * PHP 8.0 以降、PDO::ATTR_DEFAULT_FETCH_MODE のデフォルト値は PDO::FETCH_DEFAULT となりました。 9 * 10 * このサンプルでは、PDO::ATTR_DEFAULT_FETCH_MODE を明示的に設定し、 11 * その後に PDO::FETCH_DEFAULT を使用して、設定されたモードが適用されることを示します。 12 */ 13function demonstratePdoFetchDefault(): void 14{ 15 // SQLite のインメモリデータベースを使用し、外部依存なく単体で動作可能にする 16 $dsn = 'sqlite::memory:'; 17 $username = null; // SQLiteでは不要 18 $password = null; // SQLiteでは不要 19 20 try { 21 // データベースに接続 22 // エラーモードを例外に設定し、データベース操作でエラーが発生した場合にPDOExceptionをスローさせる 23 $pdo = new PDO($dsn, $username, $password, [ 24 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 25 // PHP 8以降のデフォルト挙動を明示的に指定する場合 26 // PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_DEFAULT, 27 ]); 28 29 echo "データベースに接続しました。\n"; 30 31 // 1. 簡単なテーブルを作成 32 $pdo->exec(" 33 CREATE TABLE IF NOT EXISTS users ( 34 id INTEGER PRIMARY KEY AUTOINCREMENT, 35 name TEXT NOT NULL, 36 email TEXT UNIQUE 37 ) 38 "); 39 echo "テーブル 'users' を作成しました。\n"; 40 41 // 2. データを挿入 42 $pdo->exec("INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com')"); 43 $pdo->exec("INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com')"); 44 echo "データを挿入しました。\n"; 45 46 // 3. PDO::ATTR_DEFAULT_FETCH_MODE を PDO::FETCH_ASSOC に設定 47 // これにより、デフォルトのフェッチモードが連想配列形式(カラム名をキーとする配列)になります。 48 $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 49 echo "PDOのデフォルトフェッチモードを PDO::FETCH_ASSOC に設定しました。\n"; 50 51 // 4. クエリを実行 52 $stmt = $pdo->query("SELECT id, name, email FROM users WHERE id = 1"); 53 54 // 5. PDO::FETCH_DEFAULT を使用してデータをフェッチ 55 // ここで PDO::FETCH_DEFAULT を指定すると、 56 // 上で PDO::setAttribute() で設定した PDO::FETCH_ASSOC が適用されます。 57 $user = $stmt->fetch(PDO::FETCH_DEFAULT); 58 59 echo "\n--- PDO::FETCH_DEFAULT を使用してフェッチした結果 (PDO::FETCH_ASSOC が適用) ---\n"; 60 print_r($user); 61 echo "結果の型: " . gettype($user) . "\n"; 62 // 連想配列なので、キーを使って値にアクセスできます 63 echo "id: " . $user['id'] . ", name: " . $user['name'] . ", email: " . $user['email'] . "\n"; 64 65 // 補足: PDO::FETCH_DEFAULT が具体的なフェッチモードを参照していることを示すため、 66 // 別のフェッチモードを設定して再度試します。 67 $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); 68 echo "\nPDOのデフォルトフェッチモードを PDO::FETCH_OBJ に再設定しました。\n"; 69 70 $stmt2 = $pdo->query("SELECT id, name, email FROM users WHERE id = 2"); 71 // PDO::FETCH_DEFAULT を使用すると、新しく設定した PDO::FETCH_OBJ が適用されます。 72 $user2 = $stmt2->fetch(PDO::FETCH_DEFAULT); 73 74 echo "\n--- PDO::FETCH_DEFAULT を使用して再度フェッチした結果 (PDO::FETCH_OBJ が適用) ---\n"; 75 print_r($user2); 76 echo "結果の型: " . gettype($user2) . "\n"; 77 // オブジェクトなので、プロパティを使って値にアクセスできます 78 echo "id: " . $user2->id . ", name: " . $user2->name . ", email: " . $user2->email . "\n"; 79 80 } catch (PDOException $e) { 81 // データベース関連のエラーを捕捉し、メッセージを出力 82 echo "データベースエラーが発生しました: " . $e->getMessage() . "\n"; 83 } catch (Exception $e) { 84 // その他の予期せぬエラーを捕捉し、メッセージを出力 85 echo "予期せぬエラーが発生しました: " . $e->getMessage() . "\n"; 86 } finally { 87 // データベース接続を閉じる (nullを代入することでPDOオブジェクトへの参照を解除) 88 $pdo = null; 89 echo "\nデータベース接続を閉じました。\n"; 90 } 91} 92 93// 関数を実行して、サンプルコードの動作を確認します 94demonstratePdoFetchDefault();
PDO::FETCH_DEFAULTは、PHPのデータベース接続を扱うPDO拡張機能で用いられる定数です。この定数は、データベースから結果セットを取得する際のデータ形式(フェッチモード)を指定するために使用されます。具体的には、PDOStatement::fetch()やPDOStatement::fetchAll()といったメソッドの引数として利用され、PDOオブジェクトまたはPDOステートメントオブジェクトに事前に設定されている「デフォルトのフェッチモード」を適用するように指示します。
この定数自体が特定のフェッチモード(例えば、連想配列やオブジェクト)を直接定義するわけではなく、PDO::ATTR_DEFAULT_FETCH_MODEという属性を通じて設定されたモードを参照し、その設定に従って結果を返します。PHP 8.0以降では、PDO::ATTR_DEFAULT_FETCH_MODEのデフォルト値がPDO::FETCH_DEFAULTとなっています。
サンプルコードでは、まずPDO::ATTR_DEFAULT_FETCH_MODEを連想配列形式のPDO::FETCH_ASSOCに設定し、その後PDO::FETCH_DEFAULTを使用してデータを取得すると、結果が連想配列として返されることを示しています。次に、デフォルトフェッチモードをオブジェクト形式のPDO::FETCH_OBJに再設定すると、再びPDO::FETCH_DEFAULTを使った際にデータがオブジェクトとして返されることが確認できます。これにより、PDO::FETCH_DEFAULTが、その時点でのデフォルト設定に柔軟に従うことが理解できます。この定数には引数はなく、内部的には整数値を返します。
PDO::FETCH_DEFAULTは、PDOオブジェクトに設定された「デフォルトのフェッチモード」を適用する定数です。これは具体的なフェッチ形式を直接指定するものではなく、PDO::ATTR_DEFAULT_FETCH_MODE属性に設定された値が適用されます。この属性は$pdo->setAttribute()で変更でき、PDO::FETCH_DEFAULTを使用するとその時点での設定が参照されます。PHP 8.0以降ではPDO::ATTR_DEFAULT_FETCH_MODEのデフォルト値がPDO::FETCH_DEFAULTとなりましたが、これはPHP 7系までとは異なる点です。実際の開発では、SQLインジェクション対策として必ずプリペアドステートメント($pdo->prepare()と$stmt->execute())を使用してください。また、try-catchブロックによる例外処理はデータベース操作の必須事項であり、エラー発生時の安定性を確保するために不可欠です。
PHP PDO::FETCH_DEFAULTでデフォルトフェッチモードを取得する
1<?php 2 3/** 4 * PDO::FETCH_DEFAULT定数と、デフォルトフェッチモードの設定・利用方法を示すサンプルコード。 5 * システムエンジニアを目指す初心者向けに、PDOの基本的な使い方とフェッチモードの概念を解説します。 6 */ 7function demonstratePdoFetchDefault(): void 8{ 9 // データベース接続情報 (SQLiteをインメモリで使用し、単体で動作可能にします) 10 $dsn = 'sqlite::memory:'; 11 $username = null; // SQLiteインメモリでは不要 12 $password = null; // SQLiteインメモリでは不要 13 14 // PDOオプションを設定 15 // ATTR_ERRMODE: エラー発生時に例外をスローするように設定 (推奨) 16 // ATTR_EMULATE_PREPARES: プリペアドステートメントのエミュレーションを無効化 (推奨) 17 $options = [ 18 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 19 PDO::ATTR_EMULATE_PREPARES => false, 20 ]; 21 22 try { 23 // PDOオブジェクトを作成し、データベースに接続 24 $pdo = new PDO($dsn, $username, $password, $options); 25 echo "PDO データベースに接続しました。\n"; 26 27 // サンプルテーブルを作成 28 $pdo->exec("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)"); 29 echo "テーブル 'users' を作成しました。\n"; 30 31 // サンプルデータを挿入 32 $pdo->exec("INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com')"); 33 $pdo->exec("INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com')"); 34 echo "サンプルデータを挿入しました。\n"; 35 36 echo "\n--- PDO::FETCH_DEFAULT 定数の値 ---\n"; 37 // PDO::FETCH_DEFAULT は、現在設定されているデフォルトフェッチモードを指示する定数です。 38 // その値は通常 0 ですが、直接その値を使うことは稀で、 39 // 主に fetch() メソッドの引数として「デフォルトモードを使用する」という意図で利用されます。 40 echo "PDO::FETCH_DEFAULT の値: " . PDO::FETCH_DEFAULT . "\n"; 41 42 echo "\n--- デフォルトフェッチモードの設定と動作 ---\n"; 43 // PDO::ATTR_DEFAULT_FETCH_MODE を使用して、PDOオブジェクト全体のデフォルトフェッチモードを設定します。 44 // ここでは PDO::FETCH_ASSOC (結果を連想配列として取得) に設定します。 45 $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 46 echo "PDOオブジェクトのデフォルトフェッチモードを PDO::FETCH_ASSOC に設定しました。\n"; 47 48 // SQLクエリを準備 49 $stmt = $pdo->prepare("SELECT id, name, email FROM users WHERE id = :id"); 50 $stmt->bindValue(':id', 1); // IDが1のユーザーを検索 51 $stmt->execute(); 52 53 // 1. fetch() メソッドに引数なしで実行 54 // PDOオブジェクトに設定されたデフォルトフェッチモード (PDO::FETCH_ASSOC) が適用されます。 55 $userAssoc = $stmt->fetch(); 56 echo "\n引数なしで fetch() を実行 (デフォルトモード: PDO::FETCH_ASSOC):\n"; 57 print_r($userAssoc); 58 59 // ステートメントをリセットし、再度クエリを実行 60 $stmt->execute(); 61 62 // 2. fetch() メソッドに PDO::FETCH_DEFAULT を引数として渡して実行 63 // これは「現在のデフォルトフェッチモードを使用する」という明確な指示になります。 64 // 結果は引数なしの場合と全く同じになります。 65 $userDefault = $stmt->fetch(PDO::FETCH_DEFAULT); 66 echo "\nPDO::FETCH_DEFAULT を引数に渡して fetch() を実行 (現在のデフォルトモード: PDO::FETCH_ASSOC):\n"; 67 print_r($userDefault); 68 69 // デフォルトフェッチモードを PDO::FETCH_OBJ (結果を匿名オブジェクトとして取得) に変更 70 $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); 71 echo "\nPDOオブジェクトのデフォルトフェッチモードを PDO::FETCH_OBJ に変更しました。\n"; 72 73 // 再度クエリを実行 74 $stmt->execute(); 75 76 // 3. fetch() メソッドに引数なしで実行 (変更された新しいデフォルトモードが適用) 77 $userObj = $stmt->fetch(); 78 echo "\n引数なしで fetch() を実行 (新しいデフォルトモード: PDO::FETCH_OBJ):\n"; 79 print_r($userObj); 80 81 // 再度クエリを実行 82 $stmt->execute(); 83 84 // 4. fetch() メソッドに PDO::FETCH_DEFAULT を引数として渡して実行 (新しいデフォルトモードが適用) 85 $userObjDefault = $stmt->fetch(PDO::FETCH_DEFAULT); 86 echo "\nPDO::FETCH_DEFAULT を引数に渡して fetch() を実行 (新しいデフォルトモード: PDO::FETCH_OBJ):\n"; 87 print_r($userObjDefault); 88 89 } catch (PDOException $e) { 90 // データベース関連のエラーが発生した場合の処理 91 echo "データベースエラー: " . $e->getMessage() . "\n"; 92 } finally { 93 // データベース接続を閉じる (SQLiteインメモリの場合、スクリプト終了時に自動的に閉じられます) 94 $pdo = null; 95 echo "\nデータベース接続を閉じました。\n"; 96 } 97} 98 99// 関数の実行 100demonstratePdoFetchDefault();
PHPのPDO::FETCH_DEFAULT定数は、データベースからデータを取得する際の形式、いわゆる「フェッチモード」において、PDOオブジェクトに現在設定されている「デフォルトのフェッチモード」を使用することを指示するものです。この定数自体は引数を持たず、整数型の戻り値を持ちますが、その具体的な値を直接扱うことは稀で、主にPDOStatement::fetch()メソッドの引数として利用されます。
サンプルコードでは、まずPDO::ATTR_DEFAULT_FETCH_MODE属性を使って、PDOオブジェクト全体のデフォルトフェッチモードをPDO::FETCH_ASSOC(結果を連想配列で取得)に設定しています。この状態でfetch()メソッドを引数なしで呼び出すと、設定されたデフォルトモードが適用されます。同様に、PDO::FETCH_DEFAULTをfetch()メソッドの引数として渡した場合も、「現在のデフォルトモードに従う」という明確な指示となり、結果は引数なしの場合と全く同じになります。
その後、デフォルトフェッチモードをPDO::FETCH_OBJ(結果を匿名オブジェクトで取得)に変更し、再度fetch()メソッドを引数なし、またはPDO::FETCH_DEFAULT引数で呼び出すと、変更された新しいデフォルトモードが適用されることを示しています。このように、PDO::FETCH_DEFAULTは、PDOオブジェクトに設定されているデフォルトのフェッチモードを明示的に適用したい場合に役立つ定数です。
PDO::FETCH_DEFAULTは、fetch()メソッドに渡すことで、現在PDOオブジェクトに設定されているデフォルトのフェッチモードを利用するよう指示する定数です。これは特定のフェッチモードそのものを指すわけではなく、fetch()メソッドの引数を省略した場合と全く同じ挙動を示します。PDOオブジェクト全体のデフォルトフェッチモードは、PDO::setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, ...)で設定します。明示的に設定しない場合のPDOのデフォルトはPDO::FETCH_BOTHです。データベース操作の安全性を確保するため、サンプルコードのようにプリペアドステートメントを常に利用し、PDO::ATTR_ERRMODEをPDO::ERRMODE_EXCEPTIONに設定することを強くお勧めします。