English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
このチュートリアルでは、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(); ?>
<?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()関数に渡すことで、ループカウンタの値またはクエリの返される行数を取得できます。このループカウンタの値は、ループが何回実行されるかを決定します。