PHP PDO で Mysql の結果を取得する

Habdul Hazeez 2023年1月30日
  1. データベースをセットアップする
  2. PHP で pdostatement.fetchall() を使用して結果を取得する
  3. PHP で PDO ステートメントを反復処理して結果を取得する
  4. PHP の PDO fetch() メソッドを使用して結果を取得する
  5. PDO fetch() メソッドの結果を前処理する
PHP PDO で Mysql の結果を取得する

PHP PDO を使用すると、統一されたインターフェイスを介して複数のデータベースを操作できます。これにより、結果のフェッチなどの日常的なデータベース操作が簡素化されます。

このチュートリアルでは、PDO ステートメントから返された複数の結果をフェッチする方法について説明します。while ループでは、PDOStatement.fetchAll、配列の反復、および fetch() メソッドを使用します。

データベースをセットアップする

このチュートリアルでは、MySQL データベースをフォローする必要があります。XAMPP サーバーをダウンロードしてインストールします。XAMPP コントロールパネルを起動し、MySQL シェルにログインします。

# This login command assumes that the
# password is empty and the user is "root"
mysql -u root -p

次の SQL クエリを使用して、fruit_db というデータベースを作成します。

CREATE database fruit_db;

出力:

Query OK, 1 row affected (0.001 sec)

使用できるサンプルデータを作成するには、fruit_db データベースで次の SQL を実行します。

CREATE TABLE fruit
(id INT NOT NULL AUTO_INCREMENT,
 name VARCHAR(20) NOT NULL,
 color VARCHAR(20) NOT NULL,
 PRIMARY KEY (id))
 ENGINE = InnoDB;

出力:

Query OK, 0 rows affected (0.028 sec)

次の方法でテーブルが存在することを確認します。

DESC fruit;

出力:

+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | NO   |     | NULL    |                |
| color | varchar(20) | NO   |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

テーブルを設定したら、次の SQL を使用してサンプルデータを挿入します。

INSERT INTO fruit (id, name, color) VALUES (NULL, 'Banana', 'Yellow'), (NULL, 'Pineapple', 'Green')

次の SQL を使用してデータの存在を確認します。

SELECT * FROM fruit;

出力:

+----+-----------+--------+
| id | name      | color  |
+----+-----------+--------+
|  1 | Banana    | Yellow |
|  2 | Pineapple | Green  |
+----+-----------+--------+

これで、PHP から結果をフェッチできます。

PHP で pdostatement.fetchall() を使用して結果を取得する

PDOStament.fetchAll() で結果をフェッチする前に、前に作成したデータベースに接続する必要があります。config.php というファイルを作成し、次のコードを配置します。データベースのユーザー名とパスワードが異なる場合は、それらを置き換えてください。

<?php
    # If necessary, replace the values for the
    # user and password variables
    $host = 'localhost';
	$database = 'fruit_db';
	$user = 'root';
	$password = '';
?>

データベースの結果をファイルにフェッチする場合は、config.php をインポートする必要があります。

fetchpdo.php という別のファイルを作成します。このファイルでは、次のことを行います。

  • データベースに接続します。
  • 新しい PDO 接続を作成します。
  • prepare() メソッドを使用して、準備された SQL ステートメントを作成します。
  • ステートメントを実行します。
  • fetchAll() メソッドを使用して結果を取得します。

次に、fetchpdo.php に次のコードを入力します。

<?php
    // Require the config file. It contains
	// the database connection
	require ('config.php');

	// Create a connection string
	$database_connection = "mysql:host=$host;dbname=$database;charset=UTF8";

	// Create a new PDO instance
	$pdo = new PDO($database_connection, $user, $password);

	// Prepare a SQL statement
	$statement = $pdo->prepare('SELECT name, color FROM fruit');

	// Execute the statement
	$statement->execute();

    // Fetch the results
    print("Fetch the result set:\n");
    $result = $statement->fetchAll(\PDO::FETCH_ASSOC);
    print "<pre>";
    print_r($result);
    print "</pre>";
?>

出力:

Array
(
    [0] => Array
        (
            [name] => Banana
            [color] => Yellow
        )

    [1] => Array
        (
            [name] => Pineapple
            [color] => Green
        )

)

PHP で PDO ステートメントを反復処理して結果を取得する

SQL プリペアドステートメントを実行すると、while ループを使用して結果を反復処理できます。詳細は次のコードブロックにあります。

<?php
    // Require the config file. It contains
    // the database connection
    require ('config.php');

    // Create a connection string
    $database_connection = "mysql:host=$host;dbname=$database;charset=UTF8";

    // Create a new PDO instance
    $pdo = new PDO($database_connection, $user, $password);

    // Prepare a SQL statement
    $statement = $pdo->prepare('SELECT name, color FROM fruit');

    // Execute the statement
    $statement->execute(array());

    // Iterate over the array
    foreach($statement as $row) {
        echo $row['name'] . "<br />";
    }
?>

出力:

Banana
Pineapple

PHP の PDO fetch() メソッドを使用して結果を取得する

fetch() メソッドは、結果から次の行をフェッチします。これにより、while ループで使用できます。

詳細は次のコードブロックにあります。

<?php
    // Require the config file. It contains
    // the database connection
    require ('config.php');

    // Create a connection string
    $database_connection = "mysql:host=$host;dbname=$database;charset=UTF8";

    // Create a new PDO instance
    $pdo = new PDO($database_connection, $user, $password);

    // Prepare a SQL statement
    $statement = $pdo->prepare('SELECT name, color FROM fruit');

    // Execute the statement
    $statement->execute(array());

    // Use while loop over the array
    while ($row = $statement->fetch()) {
        echo $row['name'] . "<br />";
    }
?>

PDO fetch() メソッドの結果を前処理する

データベースデータを前処理したい場合は、while ループを使用できます。次に、処理された結果を配列に格納します。次のコードは、これを行う方法を示しています。

<?php
    
    // Require the config file. It contains
    // the database connection
    require ('config.php');

    // Create a connection string
    $database_connection = "mysql:host=$host;dbname=$database;charset=UTF8";

    // Create a new PDO instance
    $pdo = new PDO($database_connection, $user, $password);

    // Create an empty array to store the results
    $result = [];

    // Prepare a SQL statement
    $statement = $pdo->prepare('SELECT name, color FROM fruit');

    // Execute the statement
    $statement->execute(array());

    // Iterate over the result and assign
    // new names to the table rows
    while ($row = $statement->fetch()) {
        $result[] = [
            'Fruit Name' => $row['name'],
            'Fruit Color' => $row['color'],
        ];
    }

    print "<pre>";
    print_r($result);
    print "</pre>";
?>

出力:

Array
(
    [0] => Array
        (
            [Fruit Name] => Banana
            [Fruit Color] => Yellow
        )

    [1] => Array
        (
            [Fruit Name] => Pineapple
            [Fruit Color] => Green
        )

)
著者: Habdul Hazeez
Habdul Hazeez avatar Habdul Hazeez avatar

Habdul Hazeez is a technical writer with amazing research skills. He can connect the dots, and make sense of data that are scattered across different media.

LinkedIn