戻る

テーブルの全レコードを読み込む

mysql_query()関数、mysql_fetch_array()関数、mysql_free_result()関数、SELのSELECT文

MySQLデータベースからデータを読み込む方法はいくつかあります。ここでは「mysql_query()関数でSQL文を発行して、mysql_fetch_array()関数で結果セットから1レコード文のデータを取り出す」という方法について解説します。

mysql_query()関数でSQL文を発行する

mysql_query()関数は、MySQLデータベースに対してSQL文を発行するための関数です。ここでは「sampledb」データベースの「fifaranking」テーブルからすべてのフィールドとレコードを読み込むものとして、以下のSQL文を引数に指定します。

SELECT * FROM fifaranking

mysql_query()関数の引数としてSELECT文を指定した場合、返り値はデータベースから返された結果セット(レコードの集まり)のIDになります。引数がIINSERT文やUPDATE文などの場合は、SQLの発行に成功したときはTrue、失敗した場合にはFalseになります。

mysql_fetch_array()関数で結果セットから1レコード文のデータを取り出す

開いた結果セットから1レコード文のデータを取り出すには、mysql_fetch_array()関数を使います。mysql_fetch_array()関数の引数には、先ほどmysql_query()関数から返された結果セットIDを指定します。

この関数の返り値は、結果セット内のカレントコード(初めて呼び出したときは1レコード目)の各フィールド値(保存されているデータ)です。返り値は連想配列または数値インデックスの配列となっており、テーブル上のフィールド名や列番号をインデックスに指定することで、それぞれのフィールドのデータを取り出すことができます。例えば、MySQL上のフィールド名が「rank」なら、以下のような配列を行います。

$col["rank"]

mysql_fetch_array()関数を呼び出すたびに、カレントコードは1つ次へ進みます。最後のレコードを過ぎるとFalseを返すので、While文で返り値がFalseになるまでループすることで、結果セット内にあるすべてのレコードを読み込むことができます。

この関数の第2引数として、以下のように返り値の形式を指定できます。この例では第2引数を省略しているので、1列目から$col[0]、$col[1]……のような記述で各フィールドのデータを取り扱うこともできます。

MySQL_BOTH連想配列と数値インデックスの両方で返す
MySQL_ASSOC連想配列として返す
MySQL_NUM数値インデックス配列として返す
省略MySQL_BOTHに同じ

SELECT文を使ってすべてのレコードの読み込み処理が完了したら、最後にmysql_free_result()関数を使って結果セットを破棄してメモリを開放します。この関数の引数には、mysql_query()関数から返された結果セットIDを指定します。ただし、メモリはスクリプトの終了時に自動的に解放されます。結果セットのデータ量が膨大であるなど、PHPスクリプトの実行時のメモリ使用量が極端に多くkなる場合以外は省略できます。

<?php
header("Content-type: text/html; charset=utf-8");

define("DBSERVER","localhost");
define("DBUSER","root");
define("DBPASSWORD","root");
define("DBNAME","sampledb");

//DB接続
if(!$con = @mysql_connect(DBSERVER, DBUSER, DBPASSWORD)){
	die("MySQLに接続できませんでした!<br>");
	exit();
}

//DB選択
if(!$selectdb = @mysql_select_db(DBNAME)){
	die(DBNAME . "が見つかりませんでした!<br>");
	exit();
}


//文字コードセット
if(!$result =@mysql_query("SET NAMES utf8;")){
	die("sqlエラー!<br>");
	exit();
}


//データ取得
$sql = "SELECT * FROM fifaranking";

if(!$result =@mysql_query($sql)){
	die("sqlエラー!<br>");
	exit();
}


$body = "";
while($col = @mysql_fetch_array($result)){
	$body .= "<tr>";
	$body .= "<td align=\"center\">" . $col["rank"] . "</td>";
	$body .= "<td>" . $col["team"] . "</td>";
	$body .= "<td>" . $col["area"] . "</td>";
	$body .= "<td align=\"right\">" . $col["point"] . "</td>";
	$body .= "</tr>";
}

//結果を破棄
mysql_free_result($result);


//DB切断
if(!$con = @mysql_close()){
	die("MySQLとの接続を解除できませんでした!<br>");
	exit();
}
?>
<!DOCTYPE HTML>
<html lang="ja-JP">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<table border="1">
<tr>
	<th>順位</th>
	<th>チーム</th>
	<th>地域</th>
	<th>ポイント</th>
</tr>
<?=$body?>
</table>
</body>
</html>

inserted by FC2 system