概要
みなさんこんにちはcandleです。前回と引き続き、SQLiteManagerを使用してsqlite3を試してみましょう。
はじめに、書いておきますが、MAMPのSQLiteManagerはSQLite3に対していくつかバグがあり、phpが動作しなかったり、レコードが削除できなかったりします。
対処法としては、自分で別のSQLiteManagerを入れるなどあるかもしれませんが、別に全ての動作をSQLiteManagerでやらなければよい話です。必要とあらば、SQLクエリーをなげたり、自分でphpアプリケーションを作ればなんとかなります。
前提
- PHPが5.3以上上である
- SQLite3のデータベースが作られている
もしも、データベースが無い場合はこのブログの前回の記事を参照してください。
MAMPのSQLiteManagerを使用してsqlite3データベースの作成とデータベースファイルの設置
SQLiteManagerでテーブルを作る
それでは簡単なテーブルを作りましょう。よくあるthreadテーブルを作ります。
要素はid、name、title、content、created、modifiedにします。
名前の項目に「thread」と書き、フィールド数は6にします。そしたら、実行を押しましょう。
一つ一つ埋めていきます。
- idはint型でnot null でプライマリーにしておきます。]
- nameはvarchar型で長さを255にします。
- titleもvarchar型で長さを255にします。
- contentはtext型にして長さは指定しません。
- createdはdatetimeを指定して、not nullにします。
- modifiedはtimestamp型でnot nullにします。
記入できたら、保存を押しましょう。
下のような画面が出たら成功です。
レコードを挿入する
ではthreadテーブルにサンプルデータを挿入しましょう。
「挿入」タブを選びます。
- idにあるnullの所のチェックを外します。idの値は「1」にします。
- nameの値は例として「candle」にします。
- titleの値は「hello」
- contentの値は「good job!」
で、ここに1つバグがあります。
createdとmodifiedの値は「関数」からNOWを指定して、SQLiteに現在時刻を挿入してほしいのですが、SQLite3を使用しているとこのコマンドが動作しません。手で書いて入力します。
createdの値は「2014-02-03 12:30:25」と入力します。
modifiedですがこれもバグがあります。modifiedの値はcreatedと同じですが、クォーテーションで囲いましょう「’2014-02-03 12:30:25’」
下の様に記入したら、保存を押しましょう。
レコードが保存されたら、成功です。
今後のために、もう2つほどレコードを挿入しておいてください。SQLタブを押しましょう。
下のsqlクエリーをコピペします。で次が重要です。
INSERT INTO 'thread' ( 'id' , 'name' , 'title' , 'content' , 'created' , 'modified' ) VALUES ( 2 , 'bob' , 'morning' , 'sleepy' , '2014-02-03 13:15:51' , '2014-02-03 13:15:51'); INSERT INTO 'thread' ( 'id' , 'name' , 'title' , 'content' , 'created' , 'modified' ) VALUES ( 3 , 'アリス' , '納豆' , '日本語も使えるよ' , '2014-02-03 15:43:16' , '2014-02-03 15:43:16');
コピペしたテキストエリアは狭いので複数行に改行されますが、これをそのまま実行するとこの改行までデータベースに収まり、正しく値が認識されません。なんでこんなエラーがあるのか分かりませんが、すごく変なバグです。下の図を見てください。modifiedの2014-02-03 15:43:16途中で改行されています。これでは問題なので、テキストエリアの右下をマウスで持って広げてください。
広げたら下の様になると思います。
途中で改行されてないことを確認したら、「実行」ボタンを押しましょう。
確認しましょう。
まとめ
この他の機能はいろいろ試してみれば分かると思います。とにかく、MAMPのSQLiteMangerはバグが多いので注意しましょう。レコードのアクション欄のレコードのデリートはsqlite3だとうまく動きませんので、SQLクエリーを発行して消したりしましょう