様々なデータを集めたものを「データベース」といいます。
例えば、会社では、社員情報や売上管理などを集めて、データベースとして管理します。
データベースが入っているサーバーを、「データベース・サーバー」といいます。
データベースを使用する利点には、下記が考えられます。
1)簡便性
2)同時アクセス性
3)セキュリティー
4)多量のデータの高速アクセス
PHPでは、多くのデータベースに対するインターフェースを標準機能として備えています。
MySQL、 Postgre、 SQLite、 Oracle、 IBM DB2…
社員情報や売上管理等は、表計算ソフトでも管理できそうですが、 異なる部署からデータを書き込んだ場合、データの整合性が取れなくなります。 また、最終的なデータがどれか分からなくなってきます。
そこで考えられたのがデーターベースです。
各部門ごとにデータを持つのではなく、会社全体でデータベースを作成して、集中管理を行います。
データを集中管理したところで、各ユーザーがデータを直接変更してしまっては、 収拾がつかなくなってしまいます。図書館で本を返却するときに、ユーザーが直接、棚に本を戻すと、 間違った場所に戻してしまう可能性があります。 本は、図書の係の人に渡して、棚に戻してもらうことにします。
データベースでは、係の人のことを「DBMSData Base Management System」といいます。 ユーザーは、どのデータをどのような形式で取り出してほしいとか、 このデータを登録してほしいといった要求を、DBMSに対して出すことになります。 この時出す要求は、“SQL”文を使用します。
システム開発でデータベースを取り扱うためには、次の2つのことを習得する必要があります。
・データベースの設計
・SQL文
データベースの設計とは、どのデータを、どの棚に、どのように配置するかを決めることです。
えっ、DBMSがやってくれるのでは?
いいえ。商品在庫を管理する倉庫を想像してください。棚をどのように並べて、 商品をどのように配置するのかは、システムの設計者が考えます。 設計図が出来上がると、倉庫の作業員がその設計図通りに棚を並べたり、受付係が商品を取り出したり、 入れたりしてくれます。倉庫の作業員や受付係に相当するのが、DBMSです。
DBMSは、設計図通りにデータベースを作成したり、データベースからデータを取り出したり、 データを登録したりします。
備考)データベースと表計算ソフト(エクセル等)との違いは、
データベースを設計するためには、データがどのように保存されるのかを知る必要があります。
データベースでは、データを表の形で保存します。表のことを「テーブル」とも言います。
たとえば、ログイン認証に関するテーブルとしては、下記が考えられます。
では、設計してみましょう。 ここでは、入力画面を元にした設計法です。
<考え方>
① 入力画面
② データベースに登録する内容:
テーブルに名前を付けます。ここでは、login_authとしています。英数字で書きます。 わかりやすくするため、日本語で、「ログイン認証」と補足しておきます。
項目名に対するフィールド名を書きます。フィールド名は英数字です。 プログラム作成では、フィールド名を実際に使います。項目名は、参考用です。
フィールド名には、PHPおよびMySQLのシステムで使われていない名称、 または使いそうにない名称にします。(printやlist等は使わない。)
中に入っているデータそのものは設計図には書きません。
次に各フィールドに割り当てる文字の種類とけた数を決定します。
テーブルの基本設計ができたら、次に1行を追加します。
テーブル名にidを付けたフィールドを作成します。各レコードを識別するために使用します。
*)login_auth_idは、同じ値を許さないことおよび、検索スピードを上げるために、
「primary」とします。
また、通常は、新しいレコードを追加したときに、自動的に+1するため、
「autoincrement」とします。
最後に照合順序を追加して、テーブルを完成させます。 照合順序は、マルチバイト文字列の場合に指定します。(intやdate等には指定する必要はありません。) 照合順序は使用する文字コードを指定します。
データベースの設計が完了したら、次に、データベースの作成およびテーブルの作成を行います。
これらの作成には、phpMyAdminという管理画面を使うと便利です。
(SQL文という命令文を使うこともできます。)
PHPブログラムから、データベースのデータを取得したり、データを登録したりするには、 「SQL文」を使用します。
SQL文には、下記のように、データの取得、登録、修正、削除等があります。
・SQL文
※「*」は、テーブル内のすべてのデータを取得します。
例)
・データベース内から特定のデータを取り出す
SQL文
※「where」で、取り出す条件を指定します。
例)
・特定のフィールドについて、昇順、降順に並べ替える
SQL文
例)
~ ORDER BY 項目名 ASC … 昇順 (「ASC」は省略可)
~ ORDER BY 項目名 DESC … 降順
・特定のフィールドに関して検索する
SQL文
例)
検索には、like を使用します。
「%」 は、ワイルド・カードを表わします。ワイルド・カードは、”任意の文字列”です。
'%山%' は、山崎、大山、小山田のどれにも合致します。
LIKE ‘山田’は、名前が「山田」と完全一致したデータを取り出します。
◆レコードを取得するには、fetch()を使用します。
(レコードとは、1行分のデータのこと。)
プログラム例 ( index.php)
上記は、whileを使って、すべてのレコード(データ)を取得し、表示しています。
(PDO : PHP Data Object。 データベースの種類を吸収するためのオブジェクト。)
・prepareステートメント
指定する項目の値を「?」として表記し、値を配列で提供することもできます。
プログラム例 ( index.php)
「prepare」の目的と利点:あるテーブルに、値だけを変えて何回もデータを挿入するような場合、 SQL文をいちいち書かなくてよいようにする。
SQL文
例)
また、下記のように書くこともできます。(MySQLの場合)
プログラム例
( index.php)
SQL文
例)
(注意)where句を忘れると、全ての行、すなわちテーブル内の全データが変更されます。
プログラム例
( index.php)
・DELETE文でデータを削除できます。
SQL文
例)
・ただし、where句を忘れると、テーブル内のすべてのデータが削除されます。
・一度削除したデータは、復活できません。
・一般的には、データは削除しないで、UPDATE文を使って「削除フラッグ」に1を立てます。
※「削除フラッグ」:削除フィールドに“1”を入れることにより、削除したとみなす。
入力画面
ログイン認証の手順:
下記は、データベース内のテーブル「login_auth」に入っているすべてのデータを取得し、表示しています。
プログラム例
( db_test.php)
※「FETCH_ASSOC」:結果の添字がフィールド名となります。
プログラム例
( login.php)