リレーショナルデータベースを利用するには、
データベース内にデータを格納するための表を
作成しなければいけません。
以下のようなSQL文を使います。
データ操作 | SQL文 |
---|---|
表を作成 | CREATE TABLE 表名 |
表を更新 | ALTER TABLE 表名 |
表を削除 | DROP TABLE 表名 |
表を作成するには、以下のように使います。
CREATE TABLE HYO1
(id INTEGER PRIMARY KEY,name STRING,price INTEGER)
上記で、HYO1という名前の表を作成することができます。
HYO1内に、連番を示すid列、文字を格納できるname列、
整数を格納できるprice列を作成しました。
SQL文を使って表の作成・更新・削除ができる。
表にデータを追加する
表を作成したら、次に表にデータを格納する必要があります。
不要なデータは変更・削除することも必要です。
データの追加・更新・削除のSQL文は、下記の通りです。
データ操作 | SQL文 |
---|---|
データを追加 | INSERT INFO 表明(列名,列名・・・) VALUES(値,値・・・) |
データを更新 | UPDATE 表名 SET 列名=値 WHERE 条件 |
データを削除 | DELETE FROM 表名 WHERE 条件 |
HYO1に「りんご,100」というデータを追加するには、
以下のように書きます。
INSERT INFO HYO1(name,price)
VALUES('りんご',100)
name列に「りんご」が、price列に「100」が格納されます。
id列は自動的に連番が格納されます。
SQL文を使ってデータの追加・更新・削除を行うことができる。
表からデータを問い合わせてみる
表とデータの準備ができたら、必要なデータを問い合わせて
データを抽出します。表の問い合わせは以下SELECT文を使います。
データ操作 | SQL文 |
---|---|
データ問い合わせ | SELECT 列名 FROM 表名 WHERE 条件 |
SELECT * FROM HYO1
HYO1に10件のデータが存在するときは、
このSQL文で10件のデータを取り出すことができます。
「*」は全ての列を表す指定です。
SQL文であるSELECT文を使ってデータを
問い合わせることができる。
表全体を表示してみる
PHPでは、色々なデータベースを使うことができます。
データベースを統一的に利用できるPDO(PHP DataObjects)という
仕様が用意されています。
そこでPHPに標準で備えられているデータベースであるSQLiteを使い
PDOによってデータベースを操作してみます。
サンプルコードの実行結果はこちら
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
<!doctype html> <html> <head> <meta charset="utf-8"> <title>データベース操作</title> <link rel="stylesheet" href="../style.css"> </head> <body> <?php $dbName = "sqlite:test.db"; $usrName= ""; $pw = ""; //データベースを開く $db = new PDO($dbName,$usrName,$pw); //表を削除する $db->exec("DROP TABLE IF EXISTS product"); //表を作成する $db->exec("CREATE TABLE product(id INTEGER PRIMARY KEY,name STRING,price INTEGER)"); //データを追加している $qry = array( "INSERT INTO product (name,price) VALUES('椅子' ,100)", "INSERT INTO product (name,price) VALUES('ものさし' , 80)", "INSERT INTO product (name,price) VALUES('消しゴム' ,160)", "INSERT INTO product (name,price) VALUES('ペン' ,210)", "INSERT INTO product (name,price) VALUES('インク' , 30)" ); foreach($qry as $value){ $db->exec($value); } //表のデータをすべて取り出す $qry = "SELECT * FROM product"; $data = $db->query($qry); ?> <table border="2"> <tr bgcolor="#c0c0c0"> <th>番号</th> <th>商品名</th> <th>単価</th> </tr> <?php while( $value = $data->fetch() ){ $id = $value["id"]; $name = $value["name"]; $price = $value["price"]; echo "<tr>" . "<td>{$id}</td>" . "<td>{$name}</td>" . "<td>{$price}</td>" . "</tr>"; } //データベースをクローズ $db = null; ?> </table> </body> </html> |
SQLiteを使うには以下の手順で行います。
1.データベースをオープン
2.SQL文を発行し、データベースを操作
3.データベースをクローズ
PDOクラスからオブジェクトを作成し、
データベースをオープンする処理を行います。このとき
データベースの「データベース名」「ユーザー名」「パスワードを
指定しなければいけません。
サンプルコードでは「test.db」としました。
標準添付されているSQLiteデータベースを使いますので、
データベース前に「sqlite:」という文字列を付けています。
他のデータベースをつかうなら、データベースに適した
名前を付けてください。
今回のサンプルコードでは、「ユーザー名」「パスワード」は
空にしてますが、普通は「ユーザー名」「パスワード」は指定します。
データベースをオープンしたとき、SQL文を発行することが
できるようになります。発行の結果を返さないSQL文を発行するには
exec()メソッドを使います。
1.DROP TABLE文を使い、データベース内に
同じ名前(手順2と同一の名前)の表が存在しないように、
最初にDROP TABLE文を使って表を削除する処理をしています。
2、CREATE TABLE文を使い、productという名前の表を作成し、
3.INSERT文でデータを追加します。
4.SELECT文でデータの問い合わせを行います。
そのときquery()メソッドを使います。
queryメソッドは問い合わせ結果を受け取ることができます。
結果を表す
PDOStatementクラスのfetch()メソッドを使うと、
結果行を1行ずづ得ることができます。while文を使いこの関数が
結果行を返すかぎり、繰り返し処理を行います。
最後に、オブジェクトにnullを代入し、
データベースをクローズしています。