PHP MySQL データの読み取り

MySQLデータベースからデータを読み取る

SELECT 文はデータテーブルからデータを読み取るために使用されます:

SELECT column_name(s) FROM table_name

* を使用して、データテーブル内のすべてのフィールドを読み取ることができます:

SELECT * FROM table_name

SQLの詳細については、次のサイトをご覧ください:SQL チュートリアル。


MySQLi を使用する

次の例では、myDB データベースの MyGuests テーブルから id, firstname, lastname 列のデータを読み取り、ページに表示しています:

例 (MySQLi - オブジェクト指向)

<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; //接続を作成 $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("接続失敗:" . $conn->connect_error); } $sql = "SELECT id, firstname, lastname FROM MyGuests"; $result = $conn->query($sql); if ($result->num_rows > 0) { //データの出力 while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; } } else { echo "0 結果"; } $conn->close(); ?>

上記のコードの説明は次のとおりです:

まず、MyGuests データテーブルから id, firstname, lastname の3つのフィールドを読み取る SQL 文を設定します。次に、その SQL 文を使用してデータベースから結果セットを取得し、変数 $result に代入します。

num_rows() 関数は、返されたデータを判定します。

複数のデータが返された場合、fetch_assoc() 関数は結果セットを連想配列に格納し、ループで出力します。while() ループで結果セットを反復処理し、id, firstname, lastname の3つのフィールド値を出力します。

次の例は MySQLi 手続き型の方法を使用しており、効果は上記のコードと似ています:

例 (MySQLi - 手続き型)

<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; //接続を作成 $conn = mysqli_connect($servername, $username, $password, $dbname); // Check connection if (!$conn) { die("接続失敗:" . mysqli_connect_error()); } $sql = "SELECT id, firstname, lastname FROM MyGuests"; $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) { //データの出力 while($row = mysqli_fetch_assoc($result)) { echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; } } else { echo "0 結果"; } mysqli_close($conn); ?>


PDO を使用する (+ プリペアドステートメント)

次の例では、プリペアドステートメントを使用しています。

MyGuests テーブルの id, firstname, lastname フィールドを選択し、HTML テーブルに配置しています:

例 (PDO)

<?php echo "<table style='border: solid 1px black;'>"; echo "<tr><th>Id</th><th>Firstname</th><th>Lastname</th></tr>"; class TableRows extends RecursiveIteratorIterator { function __construct($it) { parent::__construct($it, self::LEAVES_ONLY); } function current() { return "<td style='width:150px;border:1px solid black;'>" . parent::current(). "</td>"; } function beginChildren() { echo "<tr>"; } function endChildren() { echo "</tr>" . "\n"; } } $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDBPDO"; try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests"); $stmt->execute(); //結果セットを連想配列として設定 $result = $stmt->setFetchMode(PDO::FETCH_ASSOC); foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) { echo $v; } } catch(PDOException $e) { echo "Error: " . $e->getMessage(); } $conn = null; echo "</table>"; ?>

その他の拡張機能