(注:記事は執筆時の情報に基づいており,現在では異なる場合があります)

 ステップ5では,PHP最初の関門,データベース(DB)プログラミングを解説します。DBには,PostgreSQL,MySQL,Oracle,SQL Serverなどたくさんありますが,シンプルかつフリーのデータベース・サーバーということでMySQLを取り上げます。最初はMySQLでデータベース操作言語のSQLについて学び,それから標準ライブラリPEARを使ったプログラミング手法を紹介します。

図1●MySQL monitorを起動し,sampdbデータベースを作成したところ
図2●select文でテーブルpreftbの中身を表示
図3●limit節を使って,selectの件数を制限したところ
リスト1
リスト2

ポイント1
createでデータベースとテーブルを作る

まずMySQL monitorを起動します。コマンド・プロンプトを開いて「cd C:\mysql\bin」でカレント・フォルダを移動し,「mysql -u root -p」としたら,ステップ1の(5)で設定したrootユーザーのパスワードを入力してください。ステップ1の図6の画面が開きましたね。

 MySQLは,複数のデータベースを持つことができますが,インストールした時点では,mysqlという名前のデータベースが一つしかありません。練習用に「sampdb」という名前のデータベースを作成しましょう。mysql>というプロンプトで,

create database sampdb;

と入力します(図1[拡大表示])。これはcreate database構文を使って,データベースsampdbを作成するSQLです。最後の;(セミコロン)を忘れないでください。

 次にsampdb内に,サンプル用のテーブル(Excelのワークシートのような表だと思ってください)を作成します。ただし,いちいちSQLを入力するのは面倒なので,SQLを記述したテキスト・ファイルを作成し,それをMySQL monitorで読み込んで実行させるようにしましょう。テキスト・エディタでリスト1[拡大表示]のコードを入力し,C:\mysqlにファイル名preftb.sqlなどとして保存してください。また,サンプル・データ用のファイル(リスト2)もC:\mysqlにファイル名をpref.txtなどとして保存します。そして,MySQL monitorのsourceコマンドを使いmysql>プロンプトで

source c:\mysql\preftb.sql

と入力すればOK。テーブルpreftbのできあがりです。
 リスト1の中身を簡単に説明しましょう。(1)はデータベースsampdbの選択,(2)のdrop文は,テーブルpreftbがすでにあった場合に削除しておくSQLです。(3)のcrteate table文でテーブルを作成します。テーブル名はpreftb,( )の中にフィールド名(表の列名)を定義します。フィールドprefnoは符号なしsmallint型で主キー(primary key)に,prefnameはvarchar(可変長文字列)型に,指定しています。

 (4)のgrant文は,テーブルpreftbを操作できるユーザーを作成し,操作権限を設定するSQLです。ここでは,パスワード「tbnq0206」のユーザー「sampuser@localhost」を作成し,テーブルpreftbに対しselect(レコードの取得),insert(レコードの追加),update(レコードの変更),delete(レコードの削除)を行う権限を与えています。

 (5)のload data文はテーブルに外部ファイルからデータをロードするSQLです。

ポイント2
limit句でselectの数を指定する

 SQLで最も頻繁に使うのは,テーブルに格納したレコードを取得するselect文です。mysql>で

select * from preftb;

として,preftbの全レコードを表示させてみましょう(図2[拡大表示])。selectの後ろにフィールド名,fromの後ろにテーブル名を記述するのがselect文の書式です。*(アスタリスク)を指定すると,テーブルのすべてのフィールドを取得します。

 select文は非常に簡単なSQLですが,実際にWebアプリケーションを開発する場合には注意が必要です。preftbのようなレコード件数が少ないテーブルならともかく,数万件~数十万件のレコードがあったらレコードをすべて取得するまで膨大な時間がかかってしまうからです。

 そこで,select文が取得するレコード件数を制限するのがlimit節です。例えば,

select * from preftb limit 10;

とすれば,先頭から10個のレコードを取得します。

 limit節は引数を二つ設定することで,取得開始位置と取得件数を指定することもできます。例えば,

select * from preftb limit 8,2;

とすれば,(最初のレコードは0行目とカウントするので)9レコード目と10レコード目を表示します(図3[拡大表示])。limit節を使うことで,一度に表示する件数を決めて,前後にレコードをスクロールさせることができるわけです。

金宏和實(Kanehiro Kazumi)

■著者紹介 金宏和實(かねひろ・かずみ)氏

株式会社イーザー代表取締役副社長。富山県高岡市在住。


(次回に続く)