select文を実行
- DB接続
- query()メソッドの引数にSQL文を渡す
$dsn = 'mysql:dbname=php_db;host=localhost;charset=utf8mb4'; $user = 'root'; $password = ''; try { $pdo = new PDO($dsn, $user, $password); // usersテーブルからidカラムとnameカラムのデータを取得するためのSQL文を変数$sqlに代入する $sql = 'SELECT id, name FROM users'; // SQL文を実行する $pdo->query($sql); } catch (PDOException $e) { exit($e->getMessage()); }
上記のコードはquery()メソッドでSELECT文を実行してデータを取得しているだけなので、ブラウザには何も表示されません。
fetchAll()メソッドでSQL文の実行結果を取得
「query()メソッドが戻り値としてPDOStatementクラスのオブジェクトを返す」のでそのオブジェストのfetchAll()メソッドで結果を配列として取得できる。
fetchAll()メソッドは$stmt->fetchAll(PDO::FETCH_ASSOC)のように引数を渡すことで、取得する配列の形式を指定することができます。
なお、引数を渡さない場合はデフォルトのPDO::FETCH_BOTH(both=両方の)という設定が適用され、カラム名と番号(0~)の両方をキーとする配列として各データ(レコード)が返されます。
以下は引数を渡さなかった場合(PDO::FETCH_BOTH)の戻り値です。配列の中に配列が入っている2次元配列であることがわかります。
<body> <p> <?php $dsn = 'mysql:dbname=php_db;host=localhost;charset=utf8mb4'; $user = 'root'; $password = ''; try { $pdo = new PDO($dsn, $user, $password); // usersテーブルからidカラムとnameカラムのデータを取得するためのSQL文を変数$sqlに代入する $sql = 'SELECT id, name FROM users'; // SQL文を実行する $pdo->query($sql); $stmt = $pdo->query($sql); // SQL文の実行結果を配列で取得する オプションでPDO::FETCH_ASSOCかPDO::FETCH_BOTHを渡せる。引数なしだとBOTHが実行される。 $results = $stmt->fetchAll(PDO::FETCH_ASSOC); // 配列の中身を出力する print_r($results); } catch (PDOException $e) { exit($e->getMessage()); } ?> </p> </body> </html>
PDO::FETCH_ASSOC
の時の$results配列の中身
Array ( [0] => Array ( [id] => 1 [name] => 氏家 愛梨 ) [1] => Array ( [id] => 2 [name] => 海老原 惇 ) ======== 中略 ======== [28] => Array ( [id] => 29 [name] => 日高 敦 ) [29] => Array ( [id] => 30 [name] => 伊藤 扶樹 ) )
PDO::FETCH_BOTH
の時の$results配列の中身
Array ( [0] => Array ( [id] => 1 [0] => 1 [name] => 氏家 愛梨 [1] => 氏家 愛梨 ) [1] => Array ( [id] => 2 [0] => 2 [name] => 海老原 惇 [1] => 海老原 惇 ) ======== 中略 ======== [28] => Array ( [id] => 29 [0] => 29 [name] => 日高 敦 [1] => 日高 敦 ) [29] => Array ( [id] => 30 [0] => 30 [name] => 伊藤 扶樹 [1] => 伊藤 扶樹 ) )