Developer

【PHP応用】PDO⑦ SELECT文
2021.08.31
Lv1

【PHP応用】PDO⑦ SELECT文

PDO⑦ SELECT文

今回はPDO、プリペアードステートメントを使用してSELECT文を発行してみます。
※プレースホルダの使用については次回。

■SELECT文の発行

基本的は使い方はINSERT文のときと変わりません。
しかし、結果セットを取得する点がINSERT文と異なります。
結果セットを取得するには以下のメソッドを使用します。

fetch 結果セット1件を取得
fetchAll 結果セットを全件取得

今回はfetchAllを使用したサンプルプログラムを紹介します。
※fetchについては次回扱う、より実用的なサンプルプログラムにて紹介します。

■サンプルプログラム

sample_db.membersからデータを取得して表示してみます。
※筆者と同じ環境にするためには以下のSQLを実行してください。次回も使用します。

CREATE TABLE members (
    id INT(11) NOT NULL,
    name VARCHAR(50) NOT NULL,
    age INT(11),
    address VARCHAR(50) NOT NULL
);
INSERT INTO members (id, name, age, address) VALUES
(1, '田中', 25, '東京'),
(2, '山田', 30, '北海道'),
(3, '佐藤', 20, '沖縄');

pdo_select.php

<?php
    try {

        // 接続処理
        $dsn = 'mysql:host=localhost;dbname=sample_db';
        $user = 'root';
        $password = '';
        $dbh = new PDO($dsn, $user, $password);

        // SELECT文を発行
        $sql = "SELECT * FROM members";
        $stmt = $dbh->prepare($sql);
        $stmt->execute();
        $rows = $stmt->fetchAll(); // 全てのレコードを取得

        // 接続切断
        $dbh = null;

    } catch (PDOException $e) {
        print $e->getMessage() . "<br/>";
        die();
    }
?>


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>PDO SELECT文</title>
</head>
<body>
    <table border="1">
        <tr>
            <th>ID</th>
            <th>名前</th>
            <th>年齢</th>
            <th>住所</th>
        </tr>

<?php
    foreach($rows as $row){
?>
        <tr>
            <td><?php print($row['id']) ?></td>
            <td><?php print($row['name']) ?></td>
            <td><?php print($row['age']) ?></td>
            <td><?php print($row['address']) ?></td>
        </tr>
<?php
    }
?>
    </table>
</body>
</html>

実行結果

■解説

14行目でプリペアードステートメントからfetchAllメソッドを呼び出しています。
すると結果セットを連想配列として取得できるので、42行目からのforeachでデータを表示しています。
もし連想配列ではなく、オブジェクトとして取得したい場合には、fetchAllメソッドの引数にPDO::FETCH_OBJを指定します。
※次回はオブジェクトとして取得してみます。

$rows = $stmt->fetchAll(PDO::FETCH_OBJ);

■まとめ

  • SELECT文を発行する場合は、プリペアードステートメントからfetchまたはfetchAllメソッドを呼び出すことができる
  • fetchまたはfetchAllメソッドを呼び出すことによって結果セットを連想配列やオブジェクトとして取得できる