HOME -> プログラム -> PHP Script -> PHP 実践-1 -> PHP 実践 データベース接続

PHP 実践 データベース接続

大量のデータを扱いたい時、 膨大な情報から迅速に目的のものを探し出したい時、 どうしたらいいでしょうか? ここでは MySQL と PHP を連携させてみたいと思います。 データベースと聞いただけで難しそう、って思ってしまうアナタ! 「PHPはデータベースとの親和性も高く・・・」 といううたい文句は伊達ではありません。 大規模なWebアプリケーションを組み立てるというならそこそこの技術が必要ですが、 ちょっと扱ってみるという程度にはビックリするほど簡単です。 数行のソースコードでデータベースを扱えてしまう事に喜びを感じられるでしょう。

 では実際に MySQL への接続を試みてみたいと思います。 MySQL には
ユーザー名 root
パスワード pass
データベース名 testdb
という上記の設定がなされているものとします。 また、下記のテーブルが定義されているものとします。
create table testbook(
	id int primary key auto_increment,
	name varchar(20),
	adr text,
	tel varchar(16),
	age int,
	grpid int); 
+----+---------------+--------+--------------+------+-------+
| id | name          | adr    | tel          | age  | grpid |
+----+---------------+--------+--------------+------+-------+
|  1 | Yamada takasi | Tokyo  | 03-0000-0000 |   24 |     1 |
|  2 | Nisi tokio    | Nagano | NULL         |   28 |     1 |
+----+---------------+--------+--------------+------+-------+
 では上記の設定で、単純に MySQL への接続を試みてみたいと思います。
<?php
$conp = mysql_connect('localhost','root','pass');
$bp = mysql_select_db('testdb',$conp);
if($bp){
	echo "testdb データベースに接続しました";
}else{
	echo "testdb データベースへの接続に失敗しました";
}
?>
たったこれだけです。 これで
testbook データベースに接続しました 
 と表示されていれば接続が成功しています。 もしここで失敗するようなら、 MySQL の設定をもう一度確認してください。 コーディングの間違いよりは MySQLのユーザー名とかパスワード等の名前を勘違えてコーディングしている可能性が高いです。

 上記のコードは非常に理解しやすいかと思います。 mysql_connect('データベースの位置','ユーザー名','パスワード'); 戻り値は MySQL接続のリソースになります。 また、この下の mysql_select_db('testdb',$conp) は、 mysql_select_db('データベース名',データベース接続リソース); 戻り値は 接続成功なら true を返し、失敗なら false を返すようになっています。 この関数は SQL文 でいうなら use testdb; にあたるところです。

 画面に「接続しました」と、表示するだけでは何の能も無いですね。 データベースはそこから望む情報を取り出せて初めて役に立つものです。 ここでは一歩踏み込んで情報を取り出します。 非常に初歩的ですが、ここでは「adr」フィールドに「Tokyo」が設定されているレコードだけを取り出してみます。
<?php
$conp = mysql_connect('localhost','root','pass');
$bp = mysql_select_db('testdb',$conp);
if($bp){
	echo "testdb データベースに接続しました<br />";
	$sqlstr = "select * from testbook where adr like 'Tokyo';";
	$res = mysql_query($sqlstr,$conp);
	while($row = mysql_fetch_array($res)){
		echo "Nmae = ",$row['name']," ;
		 age = ",$row['age'],"<br />";
	}
}else{
	echo "testdb データベースへの接続に失敗しました<br />";
}
?> 
 以下結果表示
testdbデータベースに接続しました
Nmae = Yamada takasi ; age = 24 
意外とあっけなく接続できた上、データを取り出す事ができたと思います。 データベースを選択するところまでは同じです。 あとは SQL文 を宣言してやればよいのですが、 これを受け付けるのが mysql_query() 関数です。 mysql_query('SQL文',接続リソース(mysql_connect()の戻り値)); 二つの引数をとり、戻り値は結果リソースになります。
 insert や update,delete 等のSQL文ならこれでSQLが発行されたので一応終了といったとこですが、 ここでは select 文なので結果表示を行いたいですね。
 という事で使うのが mysql_fetch_array() 関数です。 これは引数に先程の SQL 結果リソースをとり、戻り値で結果配列を返します。
 複数行が結果として返されている場合に備えて while() 処理で結果行分だけ取得します。

 PHPを使って(MySQLに限らず)データベースを扱う方法は上記が基本です。 Webアプリでデータベースを扱う場合、 必要な技術はプログラム言語に対しての知識もさることながら データベースを扱うSQLへの知識だと思っています。
 時として膨大なレコード及びフィールドを内包するデータベースを扱う事があります。 数万件程度は SQL なら瞬時に結果を返してくれるでしょう。ですが数十万件、数百万件では? このあたりになってくると必要となるのはプログラムのチューニングも大切ですが、 それ以上にデータベースのチューニングがパフォーマンスを大きく左右します。


2008年 12月 23日ドキュメント作成
2008年 12月 24日ドキュメント更新