- 2007-04-20 0:35
- php
PHPはDB(Database)との連携が簡単という噂を聞きつけ、実際にやってみました。入門編にふさわしく出来るだけシンプルに仕上げています。
以前のエントリ「さくらインターネットでMySQL使ってみる入門」で作成したMySQLのデータをそのまま利用します。
DB情報は以下の通りです(例なので実際とは異なります)。
データベース名:adamrocker
ユーザ名:adamrocker
パスワード:passwd
テーブルは下の通りです。
| name |
+―――――+
|adamrocker|
| jojo |
+―――――+
PHPとMySQLの連携プログラムをネットで探すと、全体像が見えにくい形のモノが多かったので、ここではプログラム自体をとても小さくし、全体を見渡せるよう、HTML付きでご紹介します。サンプルはMySQLデータベースに問い合わせ、結果を表示するプログラムです。
<html>
<head>
<title>PHP + MYSQL the simplest sample.</title>
</head>
<body>
<h1>PHP + MYSQL the simplest sample.</h1>
<?php
$server = "mysql.db.sakura.ne.jp";
$mydb = "adamrocker";
$usr = "adamrocker";
$pass = "passwd";
$query = "select name from first_mysql";
$link = mysql_connect($server, $usr, $pass);
$db = mysql_select_db($mydb, $link);
$result = mysql_query($query);
?>
<ul>
<?php
while($row = mysql_fetch_assoc($result)) {
printf("<li>%s</li>", $row["name"]);
}
?>
</ul>
<?php
mysql_free_result($result);
mysql_close($link);
?>
</body>
</html>見やすくするため、PHPのフェーズごとにPHPタグを分けています。
必要なデータを準備するフェーズです。
<?php $server = "mysql.db.sakura.ne.jp"; $mydb = "adamrocker"; $usr = "adamrocker"; $pass = "passwd"; $query = "select name from first_mysql"; $link = mysql_connect($server, $usr, $pass); $db = mysql_select_db($mydb, $link); $result = mysql_query($query); ?>
$queryはSQLの命令です。命令内容は以前のエントリ「さくらインターネットでMySQL使ってみる入門」と全く同じです。この命令列を変更する事で、取得できるデータの種類を変更できます。
まず、
$link = mysql_connect($server, $usr, $pass);
これは、MySQLサーバに接続しています。
コマンドライン上では、
Enter password:
と同じです。
次に、
$db = mysql_select_db($mydb, $link);
これは、データベースを移動しています。
コマンドライン上では、
と同じです。
そして最後にデータを取得します。
$result = mysql_query($query);
$resultにはテーブルの一部(今回は全部ですが)が格納されています。
このフェーズでは、DBから取得したテーブルをHTMLに整形しています。
<?php while($row = mysql_fetch_assoc($result)) { printf("<li>%s</li>", $row["name"]); } ?>
まず、
$row = mysql_fetch_assoc($result)
このmysql_fetch_assoc関数は$resultテーブルを上から順に行単位の連想配列で取り出すことができます。
whileループになっている事からもお分かりだと思いますが、このfetchで$resultの先頭要素が取り除かれています。すなわち、whileで$resultの要素がなくなるまでループしています。
取り出した結果は、
printf("<li>%s</li>", $row["name"]);
こうして出力されます。$row[”name”]が連想配列の部分ですね。
ちなみに、$resultを連想配列ではなく、mysql_fetch_array関数で単純な配列として取り出すことも可能です。その時、テーブルのカラムは左から順に0番目の要素に格納されます。
では、最後のフェーズです。このフェーズはお行儀良くするためのフェーズです。つまり、後処理です。
<?php mysql_free_result($result); mysql_close($link); ?>
$resultをメモリ上から削除し(mysql_free_result)、データベースとのコネクションを切ります(mysql_close)。コネクションは自動で切れるようになっているそうですが、お行儀として明示的に切っておきます。
このプログラムにブラウザからアクセスした結果は、

この様になります。
今回ご紹介したプログラムは全体を眺められるようシンプルにしましたが、実用ではエラーチェックや、文字列チェックを行う必要があります。実際、MySQLと連携できているかを確認する用途なら、エラーチェックを含めておくと良いと思います
。もし、プログラムがうまく動いていないようなら、どこでそれが起こっているのかを確認できるからです。
では、そのコードもご紹介しておきます。
<html>
<head>
<title>PHP + MYSQL the simplest sample.</title>
</head>
<body>
<h1>PHP + MYSQL the simplest sample.</h1>
<?php
$server = "mysql.db.sakura.ne.jp";
$mydb = "adamrocker";
$usr = "adamrocker";
$pass = "passwd";
$query = "select name from first_mysql";
$link = mysql_connect($server, $usr, $pass);
if(!$link) {
die("cannot connect:" . mysql_error());
}
$db = mysql_select_db($mydb, $link);
if(!$db) {
die("cannot use $mydb" . mysql_error());
}
$result = mysql_query($query);
if(!$result) {
die("empty: " . mysql_error());
}
?>
<ul>
<?php
while($row = mysql_fetch_assoc($result)) {
printf("<li>%s</li>", $row["name"]);
}
?>
</ul>
<?php
mysql_free_result($result);
mysql_close($link);
?>
</body>
</html>これで、DB連携のどこで失敗したのかが分かります。
PHPのMySQL関係の関数リファレンスを参考にすると、MySQLを使ってもっと色々なことが楽しめるかもしれません。「PHPリファレンス: MySQL関数」
PHPはとても簡単にMYSQLと連携する事が出来ることが分かりました。比較的大きなWebサービスの多くはデータベースを保持していると思います。大規模なWebサービスを提供する第一歩にいかがでしょうか?!
- Newer: Google AJAX Feed APIでとても簡単にRSS Readerを作ってみる
- Older: 超シンプルなJSONP入門
Comments:3
- YMN 08-04-16 (水) 16:16
-
参考にさせていただきました。
しかし、どうしても接続ができません。エラーは以下の通りです。
empty: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ‘author_auth_type’ at line 1考えられる解決策をご教示いただけますでしょうか。
よろしくお願いいたします。
- YMN 08-04-16 (水) 16:31
-
参考にさせていただいております。
早速ですが、記載通りに接続を試みたのですが
以下のようなエラーが表示されます。empty: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ‘author_auth_type’ at line 1
考えられる原因はわかりますでしょうか。
お忙しい中申し訳ございませんが
ご教示の程よろしくお願いいたします。 - adamrocker 08-04-16 (水) 19:22
-
>YMNさん
始めまして、コメントありがとうございます。
エラー文を読む限りMySQLのバージョンが怪しそうですね。
どのようなSQL文を構築しているか分かりませんが、MySQLのバージョンでサポートしているSQL文に修正する必要があるのかもしれません。
ちなみに私のMySQLのバージョンは4.1.20となっています。
もし私と同じバージョンであれば、YMNさんが構築したSQL文がそのバージョンのMySQLではサポートしていないと思われます。推測のアドバイスなので間違っているかもしれません。
ご参考までに。
Trackbacks:0
- Trackback URL for this entry
- http://www.adamrocker.com/blog/104/php_mysql_simplest_sample.html/trackback/
- Listed below are links to weblogs that reference
- はじめての連携PHP+MySQL入門 from throw Life
