こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

sqlite+phpでのテーブル作成

こんばんは
php+sqlite+pdoで掲示板を作ろうと思っているのですが
-
$db = new PDO('sqlite:test555.db','', '');
$query = "CREATE TABLE テーブル名 (テーブル内容)";
$db->query($query);
//以下掲示板表示処理など
-
とした場合、すでにテーブルが存在していてもエラーが出ずに掲示板のデータを表示してしまいます。
掲示板の機能としてはこれで動いているので問題ないのですが、プログラム的に掲示板にアクセスするたびにCREATE TABLEを実行しても良いものなのでしょうか?
出来ればテーブルが存在しない場合のみにCREATE TABLEを実行したいのですがその場合はどのように書けばいいのでしょうか?

投稿日時 - 2010-01-31 22:45:40

QNo.5639287

すぐに回答ほしいです

質問者が選んだベストアンサー

「エラーが無い」のではなく、PDOStatement::errorCode()などでチェックしてないから無視されてるだけです。
今後のために以下ページを読んでエラー対処もしましょう。
http://jp.php.net/manual/ja/pdo.error-handling.php

table 存在チェックは、No3の御回答のようにsqlite_master に問い合わせるか、
create table if not exists [tablename] ()
のように、if not exists を入れてやれば、tableが存在すればcreate実行はされないし、エラーもでません。

投稿日時 - 2010-02-01 12:33:38

お礼

ありがとうございます。

皆様のアドバイスありがたいです。
参考URLなども頂いているので確認させて頂きます。
レス下さった方ありがとうございました。

投稿日時 - 2010-02-01 14:38:51

ANo.4

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(4)

「CREATE TABLE」に先立ち「SQLITE_MASTER」テーブルへ問い合わせをすると良いでしょう。

参考URL:http://www.sqlite.org/faq.html#q7

投稿日時 - 2010-02-01 09:23:18

お礼

ありがとうございます。

投稿日時 - 2010-02-01 14:33:59

ANo.2

どんな掲示板を望むのか不明ですが、このまま完成としたら、閲覧者が来るたび新規テーブルが増えて、掲示板にならないでしょう。データが増えていくのは掲示板の中身であって掲示板の数では有りませんよね。
「CREATE TABLE」をやるのはあなたの構築時一回のみでよく、PHPで自動発生する必要はないのでは?
公開し、そこにユーザがなにか書き込むと、PHPコード内の「INSERT TABLE」文により、あらかじめフィールドも定義されたテーブルのDBレコードをひとつずつ増やしてゆく仕組みであるのが、普通のDB運用形態です。

投稿日時 - 2010-01-31 23:33:18

お礼

ありがとうございます。

投稿日時 - 2010-02-01 14:33:18

ANo.1

PDOもSQLite を使ったことがないので、アバウトなアドバイスですが、
一回、そのテーブルに対してselectを投げてやって、エラーコードで判断する。って感じですかね。。

投稿日時 - 2010-01-31 23:01:54

お礼

ありがとうございます。

投稿日時 - 2010-02-01 14:32:15

あなたにオススメの質問