PHP MySQL データの読み取り
MySQLデータベースからデータを読み取る
SELECT 文はデータテーブルからデータを読み取るために使用されます:
SELECT column_name(s) FROM table_name
* を使用して、データテーブル内のすべてのフィールドを読み取ることができます:
SELECT * FROM table_name
SQLの詳細については、次のサイトをご覧ください:SQL チュートリアル。
MySQLi を使用する
次の例では、myDB データベースの MyGuests テーブルから id, firstname, lastname 列のデータを読み取り、ページに表示しています:
例 (MySQLi - オブジェクト指向)
$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 - 手続き型)
$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)
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>";