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

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

関連記事

入門ReactでGSAPアニメーションの使い方

概要 みなさんこんにちはcandleです。今回はReactでGSAPを使ってみたいと思います。 簡単にアニメーションが使えるjsライブラリはjQueryが有名です。ただ、jQueryとReactは相性 …

railsのfluent-loggerとdevise gemを使ってユーザーの行動をfluentdサーバに収集する

概要 fluentdと言えば、ビックデータで扱うようなデータを集め出力するサーバですが、これとrailsのfluent-logger gemとdevise gemを組み合わせてユーザーの行動ログをとっ …

MAMPのSQLiteManagerを使用してsqlite3のテーブルの作成とフィールドの設定、レーコードの挿入を試す

概要 みなさんこんにちはcandleです。前回と引き続き、SQLiteManagerを使用してsqlite3を試してみましょう。 はじめに、書いておきますが、MAMPのSQLiteManagerはSQ …

React NativeでGoogle Chrome上でのデバッグ時に動作が遅くなる場合の対処

English 日本語 概要 みなさんこんにちはcandleです。 今回はReact NativeのデバッグでChromeを使うと シミュレーターの動作が遅くなってしまう問題を対処します。 とは言って …

ReactでFaker.jsを利用してダミーデータを生成する

概要 みなさんこんにちはcandleです。今回はFaker.jsをReactで使ってみようと思います。 Faker.jsの使用目的は様々あると思います。多くの場合はテストで使うと思うのですが、今回は簡 …

  • English
  • 日本語

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