PHP 実践 データベース接続
大量のデータを扱いたい時、
膨大な情報から迅速に目的のものを探し出したい時、
どうしたらいいでしょうか?
ここでは MySQL と PHP を連携させてみたいと思います。 データベースと聞いただけで難しそう、って思ってしまうアナタ!
「PHPはデータベースとの親和性も高く・・・」
といううたい文句は伊達ではありません。 大規模なWebアプリケーションを組み立てるというならそこそこの技術が必要ですが、 ちょっと扱ってみるという程度にはビックリするほど簡単です。 数行のソースコードでデータベースを扱えてしまう事に喜びを感じられるでしょう。
では実際に MySQL への接続を試みてみたいと思います。 MySQL には
ユーザー名 root
パスワード pass
データベース名 testdb
という上記の設定がなされているものとします。 また、下記のテーブルが定義されているものとします。
上記のコードは非常に理解しやすいかと思います。 mysql_connect('データベースの位置','ユーザー名','パスワード'); 戻り値は MySQL接続のリソースになります。 また、この下の mysql_select_db('testdb',$conp) は、 mysql_select_db('データベース名',データベース接続リソース); 戻り値は 接続成功なら true を返し、失敗なら false を返すようになっています。 この関数は SQL文 でいうなら use testdb; にあたるところです。
画面に「接続しました」と、表示するだけでは何の能も無いですね。 データベースはそこから望む情報を取り出せて初めて役に立つものです。 ここでは一歩踏み込んで情報を取り出します。 非常に初歩的ですが、ここでは「adr」フィールドに「Tokyo」が設定されているレコードだけを取り出してみます。
insert や update,delete 等のSQL文ならこれでSQLが発行されたので一応終了といったとこですが、 ここでは select 文なので結果表示を行いたいですね。
という事で使うのが mysql_fetch_array() 関数です。 これは引数に先程の SQL 結果リソースをとり、戻り値で結果配列を返します。
複数行が結果として返されている場合に備えて while() 処理で結果行分だけ取得します。
PHPを使って(MySQLに限らず)データベースを扱う方法は上記が基本です。 Webアプリでデータベースを扱う場合、 必要な技術はプログラム言語に対しての知識もさることながら データベースを扱うSQLへの知識だと思っています。
時として膨大なレコード及びフィールドを内包するデータベースを扱う事があります。 数万件程度は SQL なら瞬時に結果を返してくれるでしょう。ですが数十万件、数百万件では? このあたりになってくると必要となるのはプログラムのチューニングも大切ですが、 それ以上にデータベースのチューニングがパフォーマンスを大きく左右します。
では実際に 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日ドキュメント更新