Home > php

php Archive

はじめての連携PHP+MySQL入門

  • 2007-04-20 (金)
  • php

PHPはDB(Database)との連携が簡単という噂を聞きつけ、実際にやってみました。入門編にふさわしく出来るだけシンプルに仕上げています。

まずはMySQLデータ

以前のエントリ「さくらインターネットでMySQL使ってみる入門」で作成したMySQLのデータをそのまま利用します。

DB情報は以下の通りです(例なので実際とは異なります)。

データベースサーバ:mysql.db.sakura.ne.jp
データベース名:adamrocker
ユーザ名:adamrocker
パスワード:passwd

テーブルは下の通りです。

+―――――+
|  name  |
+―――――+
|adamrocker|
|  jojo  |
+―――――+
さっそくPHPと連携してみます

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タグを分けています。

1番目のフェーズ

必要なデータを準備するフェーズです。

<?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サーバに接続しています。
コマンドライン上では、

mysql -u adamrocker -h mysql.db.sakura.ne.jp -p
Enter password:

と同じです。

次に、

$db = mysql_select_db($mydb, $link);

これは、データベースを移動しています。
コマンドライン上では、

mysql> use adamrocker;

と同じです。

そして最後にデータを取得します。

$result = mysql_query($query);

$resultにはテーブルの一部(今回は全部ですが)が格納されています。

2番目のフェーズ

このフェーズでは、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番目の要素に格納されます。

3番目のフェーズ

では、最後のフェーズです。このフェーズはお行儀良くするためのフェーズです。つまり、後処理です。

<?php
        mysql_free_result($result);
        mysql_close($link);
?>

$resultをメモリ上から削除し(mysql_free_result)、データベースとのコネクションを切ります(mysql_close)。コネクションは自動で切れるようになっているそうですが、お行儀として明示的に切っておきます。

結果

このプログラムにブラウザからアクセスした結果は、

php_mysql_result.png

この様になります。

最後に

今回ご紹介したプログラムは全体を眺められるようシンプルにしましたが、実用ではエラーチェックや、文字列チェックを行う必要があります。実際、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サービスを提供する第一歩にいかがでしょうか?!

ホーム > php

Search
Feeds
Meta

Return to page top