PHPのmysql_fetch_assoc()関数でMySQLテーブルの全レコードを表示する方法
PHPスクリプトでmysql_fetch_assoc()関数を使用すると、MySQLテーブルから取得した結果セットを1行ずつ連想配列として取り出し、テーブル内のすべてのレコードを簡単に表示できます。
以下の例では、「Tutorials_tbl」というテーブルからすべてのレコードを取得し、ブラウザ上に出力しています。
サンプルコード
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn );
if(! $retval ) {
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_assoc($retval)) {
echo "Tutorial ID :{$row['tutorial_id']} <br> ".
"Title: {$row['tutorial_title']} <br> ".
"Author: {$row['tutorial_author']} <br> ".
"Submission Date : {$row['submission_date']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>
コードのポイント
- mysql_connect() でデータベースに接続し、失敗した場合は die() でエラーメッセージを表示して処理を終了します。
- mysql_query() でSELECT文を実行し、結果セットを取得します。
- while ループ内で mysql_fetch_assoc() を呼び出すことで、結果セットの各行がカラム名をキーとする連想配列として順番に取り出されます。レコードがなくなると false を返すため、ループが自動的に終了します。
注意:mysql_*系関数は非推奨です
mysql_connect() や mysql_fetch_assoc() といったmysql_系関数は、PHP 5.5で非推奨となり、PHP 7.0以降では完全に削除されました。そのため、これらのコードは最新のPHP環境では動作しません。
現在の開発では、mysqli拡張モジュール または PDO の使用が公式に推奨されています。上記と同じ処理をmysqliで書き直すと、次のようになります。
<?php
$conn = mysqli_connect('localhost', 'root', 'rootpassword', 'TUTORIALS');
if(!$conn) {
die('接続できませんでした: ' . mysqli_connect_error());
}
$sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl';
$retval = mysqli_query($conn, $sql);
if(!$retval) {
die('データを取得できませんでした: ' . mysqli_error($conn));
}
while($row = mysqli_fetch_assoc($retval)) {
echo "チュートリアルID :{$row['tutorial_id']} <br> ".
"タイトル: {$row['tutorial_title']} <br> ".
"著者: {$row['tutorial_author']} <br> ".
"投稿日: {$row['submission_date']} <br> ".
"--------------------------------<br>";
}
echo "データの取得に成功しました\n";
mysqli_close($conn);
?>
このように、mysqli_fetch_assoc() も元の関数と同様に、各行を連想配列として返してくれるため、ほぼ同じ構造のまま移行できます。新規プロジェクトでは、セキュリティ面でも優れているプリペアドステートメントと併せて、mysqliまたはPDOの利用を検討してください。
-
MySQLでGROUP BYとGROUP_CONCATを使って各グループのレコード数とID一覧を1行で表示する方法
MySQLでは、GROUP_CONCAT()とCOUNT()、さらにGROUP BY句を組み合わせることで、同じ値を持つ複数のレコードを1行にまとめ、その件数と一緒に表示することができます。本記事では、実際にテーブルを作成し、データを挿入したうえで、グループごとのレコード数とIDの一覧を取得する手順を解説します。サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable -> ( -> CompanyId int NOT
-
MySQLでテーブルの日付レコードを変更する方法|UPDATEとDATE_ADD()の使い方
MySQLで保存済みの日付データに年数を加算して変更したい場合、UPDATEコマンドとDATE_ADD()関数を組み合わせることで簡単に実現できます。ここでは、実際のSQLクエリ例を使いながら、日付レコードを変更する手順を順番に解説します。1. テーブルを作成するまず、日付型(date)のカラムを持つテーブルを作成します。mysql> create table DemoTable1984 ( ShippingDate date ); Query OK, 0 rows affected (0.00 sec)2. レコードを挿入する次に、INSERTコマンドを使ってテ