概要
みなさんこんにちはcandleです。MAMPのSQLiteデータベースとテーブルを作成して、レコードも挿入した事なので、値を取得してみましょう。
前提
phpのバージョンが5.3以上である
SQLite3のデータベースはfirstdata.sqlite3という名前にしています。
sqliteデーターベースファイルは次のパスに設置します。
使用するテーブルとデータは下のものを使います。
CREATE TABLE 'thread' ( 'id' INT NOT NULL PRIMARY KEY, 'name' VARCHAR(255), 'title' VARCHAR(255), 'content' TEXT, 'created' DATETIME NOT NULL, 'modified' TIMESTAMP NOT NULL DEFAULT '0' ); INSERT INTO 'thread' VALUES ('1', 'candle', 'hello', 'good job!', '2014-02-03 12:30:25', '2014-02-03 12:30:25'); INSERT INTO 'thread' VALUES ('2', 'bob', 'morning', 'sleepy', '2014-02-03 13:15:51', '2014-02-03 13:15:51'); INSERT INTO 'thread' VALUES ('3', 'アリス', '納豆', '日本語も使えるよ', '2014-02-03 15:43:16', '2014-02-03 15:43:16');
もしも、不明な事がある場合は過去の記事を参照してください。
前回
MAMPのSQLiteManagerを使用してsqlite3のテーブルの作成とフィールドの設定、レーコードの挿入を試す
前々回
MAMPのSQLiteManagerを使用してsqlite3データベースの作成とデータベースファイルの設置
サンプルファイルを用意する
phpのファイルを作成します。
MAMPの仕組みをよく理解していれば、MAMPのhtdocsの中に適当なフォルダを作ってその中に「sqlite_search.php」ファイルを作りましょう。
私は「sqlite」というフォルダを作りその中にsqlite_search.phpをおきました。
sqlite_search.phpファイルには次のソースを書きます。
これ、よく見ると、文字エンコーディングが「EUC-JP」なっています。というのも、SQLiteManagerで作成したsqlite3はeucが使われているからです。
UTF-8にしたいのはやまやまですが、これでいきましょう。
<?php ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="EUC-JP"> </head> <body> <h1>sqlite</h1> </body> </html>
ファイルが準備できました。phpのソースを書いていきましょう。
sqlite3データベースに接続する
前回からこの記事を見ている方は知っているかもしれませんが、sqlite3のデータベースファイルは
にあります。一方、sqlite_search.phpは次の場所にあります。
このfirstdata.sqlite3へsqlite_search.phpから接続するためには相対パスでつなぎます。
ということで、ソースは次の様になります。
<?php $db=new SQLite3('../../db/sqlite/firstdata.sqlite3'); ?>
1つのレコードを検索する
1つの値だけ取得しましょう。sqliteはsql文が普通に使えるので、sqlになれている人なら、お手のものでしょう。
<?php $db=new SQLite3('../../db/sqlite/firstdata.sqlite3'); $sql_result=$db->query("SELECT * FROM thread WHERE id=3"); $data=$sql_result->fetchArray(); print $data["id"]." : ".$data["name"]." : ".$data["title"]." : ".$data["content"]; $db->close(); ?>
説明していきましょう。$dbインスタンスのquery関数でデータベースにクエリーを投げて、その結果を$sql_resultにおさめます。
$sql_result=$db->query("SELECT * FROM thread WHERE id=3");
$sql_resultのfetchArray関数で結果を配列にして$dataにおさめます。
$data=$sql_result->fetchArray();
この$dataは連想配列の様に、テーブルのフィールド名を指定することで、値を入手できます。その値をprintで出力しています。
print $data["id"]." : ".$data["name"]." : ".$data["title"]." : ".$data["content"];
データベースの接続を切る理由がよく私は理解していないのですが、一連の処理が終わったら、データベースを閉じます。
$db->close();
表示結果は次の様になります。
sqlクエリーを変更する事で任意の値を取得できますね。
複数の値を取得する
では、今データベースにある全ての値を取得するにはどうしたらよいでしょうか。
次のようなphpを書きます。
<?php $db=new SQLite3('../../db/sqlite/firstdata.sqlite3'); $sql_result=$db->query("SELECT * FROM thread"); while( $data = $sql_result->fetchArray() ) { print $data["id"]." : ".$data["name"]." : ".$data["title"]." : ".$data["content"]."</br>"; } $db->close(); ?>
先ほどの応用技でできますね。説明していきましょう。
全ての値を取得します。
$sql_result=$db->query("SELECT * FROM thread");
while文で値がある限りは繰り返して、その値を$dataにおさめます。それをpirntで出力しています。
while( $data = $sql_result->fetchArray() ) { print $data["id"]." : ".$data["name"]." : ".$data["title"]." : ".$data["content"]."</br>"; }
これだけで、全ての値を取得できました。
まとめ
基本的には、こんな感じで検索して、値を取得します。