joppot

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

プログラミング

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

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

Pocket

afew

概要

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

SPONSORED LINK


前提

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

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

関連記事

railsのaws-sdk gemを使ってs3のファイルを削除する

by martinak15 概要 みなさんこんにちはcandleです。今回はs3にアップロードされている画像ファイルをrailsのaws-sdk gemを使用して削除してみたいと思います。 記事中で開 …

wordpress skeletonを使った開発環境の構築

はじめに みなさんこんにちはcandleです。wordpressは大変便利なのですが、いまいちgitで管理するのが難しいものです。 というのも、wordpress全体をgit管理対象にしてしまうと、w …

railsのform_forとstrong parametersを使用して画像をアップロードする

概要 みなさんこんにちはcandleです。今回はrailsのform_forを使って、railsプロジェクトのpublicディレクトリに画像をアップロードしてみましょう。 form_forは基本的にデ …

正規表現を極めるその1

概要 みなさんこんにちはcandleです。今回から正規表現を1から100まで極めようと思います。 正規表現って、使えると便利ですが、それを勉強して使いこなせている人って少ないと思います。この機会にぜひ …

Mac OS 10.9 Marvericks のMacportsでインストールしたOpencv2.4.8はXcode5、ターミナルでは使えない

概要 みなさんこんにちはcandleです。今回はopencv2.4.8が使えないという事を記事にさせてもらいます。 とは言うものの、2014年2月16日の話であって、今後修正されていくと思うので、その …

  • English
  • 日本語

プロフィール


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

スポンサードリンク

アーカイブ