English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PHP基本教程

PHP上級教程

PHP & MySQL

PHPリファレンスマニュアル

PHP MySQLデータの読み取り

このチュートリアルでは、PHPを使用してMySQLテーブルからレコードを読み取る方法を学びます。

データベーステーブルからデータを読み取る

これまでに、データベースとテーブルの作成、データの挿入方法について学びました。今や、前のチュートリアルで挿入したデータを取得する時が来ました。SQL SELECTデータベーステーブルからレコードを読み取るためのステートメントです。その基本的な文法は以下の通りです:

SELECT  column1_name,column2_name,columnN_name  FROM  table_name ;

次に、SELECT文を使用してSQLクエリを実行し、その後、PHP mysqli_query()関数に渡してテーブルデータを検索する方法を説明します。

私たちのpersonsデータベーステーブルには以下のレコードがあります:

+----+------------+-----------+----------------------+
| id | first_name | last_name | email                |
+----+------------+-----------+----------------------+
|}}  1 | Peter      | Parker    | [email protected] |
|}}  2 | John       | Rambo     | [email protected]   |
|}}  3 | Clark      | Kent      | [email protected]   |
|}}  4 | John       | Carter    | [email protected]  |
|}}  5 | Harry                      | Potter                 | [email protected]  |
+----+------------+-----------+----------------------+

以下のPHPコード例では、personsテーブルに保存されているすべてのデータを選択します(星号文字を使用して)。*)を使用して列名を代わりに選択し、テーブルからすべてのデータを選択します。

例:手続き指向的メソッド

<?php
/*MySQLサーバーの接続を試みます。MySQLが動作していることを前提とします。
デフォルト設定のサーバー(パスワードなしのユーザー「root」) */
$link = mysqli_connect("localhost", "root", "", "demo");
 
//接続を確認します
if($link === false){
    die("エラー:接続できません。" . mysqli_connect_error());
}
 
//選択クエリを実行するnを試みます
$sql = "SELECT * FROM persons";
if($result = mysqli_query($link, $sql)){
    if(mysqli_num_rows($result) > 0){
        echo "<table>";
            echo "<tr>";
                echo "<th>id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";
                echo "<th>email</th>";
            echo "</tr>";
        while($row = mysqli_fetch_array($result)){
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['first_name'] . "</td>";
                echo "<td>" . $row['last_name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        // 結果セットを解放します
        mysqli_free_result($result);
    }
        echo "レコードが見つかりません。";
    }
}
    echo "エラー:$sqlを実行できません。" . mysqli_error($link);
}
 
//接続を閉じます
mysqli_close($link);
?>

例:オブジェクト指向的メソッド

<?php
/*MySQLサーバーの接続を試みます。MySQLが動作していることを前提とします。
デフォルト設定のサーバー(パスワードなしのユーザー「root」) */
$mysqli = new mysqli("localhost", "root", "", "demo");
 
//接続を確認します
if($mysqli === false){
    die("エラー:接続できません。" . $mysqli->connect_error)
}
 
//接続エラー:$e
$sql = "SELECT * FROM persons";
if($result = $mysqli->query($sql){
    if($result->num_rows > 0){
        echo "<table>";
            echo "<tr>";
                echo "<th>id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";
                echo "<th>email</th>";
            echo "</tr>";
        while($row = $result->fetch_array(){
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['first_name'] . "</td>";
                echo "<td>" . $row['last_name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        //結果セットを解放します
        $result->free();
    }
        echo "レコードが見つかりません。";
    }
}
    echo "エラー:$sqlを実行できません。" . $mysqli->error;
}
 
//接続を閉じます
$mysqli->close();
?>

例:PDOメソッド

<?php
/*MySQLサーバーの接続を試みます。MySQLが動作していることを前提とします。
デフォルト設定のサーバー(パスワードなしのユーザー「root」) */
try{
    $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
    //PDOのエラーモードを例外に設定します
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}){
    die("エラー:接続できません。\n" . $e)}}->getMessage());
}
 
//接続エラー:$e
try{
    $sql = "SELECT * FROM persons";   
    $result = $pdo->query($sql);
    if($result->rowCount() > 0){
        echo "<table>";
            echo "<tr>";
                echo "<th>id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";
                echo "<th>email</th>";
            echo "</tr>";
        while($row = $result->fetch()){
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['first_name'] . "</td>";
                echo "<td>" . $row['last_name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        //結果セットを解放します
        unset($result);
    }
        echo "レコードが見つかりません。";
    }
}){
    die("エラー:$sqlを実行できません。\n" . $e->getMessage());
}
 
//接続を閉じます
unset($pdo);
?>

コードの使い方(プログラムスタイル)

上記の例では、mysqli_query()関数が返すデータは$result変数に格納されます。mysqli_fetch_array()を呼び出すたびに、結果セットの次の行が配列として返されます。whileループを使用して、結果セット内のすべての行を検索します。最後に、フィールドインデックスまたはフィールド名を$rrow変数に渡すことで取得できます(例:$row['id']または$row[0],$row['first_name']または$row[1、$row['last_name']または$row[2、$row['email']または$row[3)から行ごとのフィールドの値にアクセスできます。

使用する場合はforループ、$result変数をmysqli_num_rows()関数に渡すことで、ループカウンタの値またはクエリの返される行数を取得できます。このループカウンタの値は、ループが何回実行されるかを決定します。