joppot

コピペで絶対動く。説明を妥協しない

プログラミング

MAMPのPHPからSQLite3データベースにアクセスして値を取得する

投稿日:2014年2月9日 更新日:


afew

概要

みなさんこんにちはcandleです。MAMPのSQLiteデータベースとテーブルを作成して、レコードも挿入した事なので、値を取得してみましょう。

前提

phpのバージョンが5.3以上である

SQLite3のデータベースはfirstdata.sqlite3という名前にしています。
sqliteデーターベースファイルは次のパスに設置します。

/Applications/MAMP/db/sqlite/firstdata.sqlite3

使用するテーブルとデータは下のものを使います。

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データベースの作成とデータベースファイルの設置


MAMP

サンプルファイルを用意する

phpのファイルを作成します。

MAMPの仕組みをよく理解していれば、MAMPのhtdocsの中に適当なフォルダを作ってその中に「sqlite_search.php」ファイルを作りましょう。

私は「sqlite」というフォルダを作りその中にsqlite_search.phpをおきました。

fewa

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のデータベースファイルは

/Applicatoins/MAMP/db/sqlite/firstdata.sqlite3

にあります。一方、sqlite_search.phpは次の場所にあります。

/Applicatoins/MAMP/htdocs/sqlite/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();

表示結果は次の様になります。

localhost_8888_sqlite_sqlite_search_php

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>";
}

表示結果は下の図の様になります。
efwaf

これだけで、全ての値を取得できました。

まとめ

基本的には、こんな感じで検索して、値を取得します。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-プログラミング
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

pythonのpipでfabricをインストールする

概要 みなさんこんにちはcandleです。今回はpipでデプロイメントツールのfabricをインストールしたいと思います。 前提 pipがインストールされている

gemspecのsummary項目とdescription項目の違いに付いて

概要 みなさんこんにちはcandleです。 gemを自作していたら、gemspecのところでsummaryとdescriptionの違いが分からなかったので、 調べたら、公式ページに書いてあったので、 …

react-modalの背面のスクロールを固定する

概要 みなさんこんにちはcandleです。今回はreact-modalの背面がスクロールした時に動いてしまう問題を解決してみたいと思います。 前提 reactの知識がある 完成版のサンプルコード サン …

railsのroutesでhttpのGETやPOSTを指定してルーティングを表示する

概要 みんさんこんにちはcandleです。今回は少し頭をひねれば分かる事ですが、少し迷ったので、記事にまとめました。 railsですごいwebアプリケーションを作っていると、ルーティングが複雑きわまり …

Mysqlのdatetime型とtimestanp型で保存されているデータを年月日だけを指定して任意の日にちのデータを取得する方法

概要 みなさんこんにちはcandleです。今日はmysqlのdatetime型とtimestanp型におさめられているデータの取得を紹介します。 datetimeやtimestanpは多くの場合下のよ …

  • English
  • 日本語

ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー