PHPのPEAR::MDB2で"CREATE TABLE hoge"のクエリを送るかどうかの基準として特定のテーブル(仮にhogeテーブル)が存在するかどうかの判定をしたいのですが、そのためのコードを教えてください

(ちなみに使用するDBはSQLiteです)

回答の条件
  • 1人2回まで
  • 登録:2007/09/29 16:18:56
  • 終了:2007/09/29 23:11:43

回答(1件)

id:chuken_kenkou No.1

chuken_kenkou回答回数722ベストアンサー獲得回数542007/09/29 20:10:55

ポイント68pt

sqlite_masterという表に、表の定義情報が入っているようです。

表名='hoge'とすれば、以下のSQLで検索可能です。

SELECT * FROM sqlite_master WHERE type='table' AND name='hoge'

また、create table文で、「if exists」を指定すれば、「表が存在すれば表を定義し、存在しなければ何もしない」という指定になります。

create table if exists hoge
(c1    int,
 c2    varchar(10))
id:leva

ありがとうございます。

前者の方法は知りませんでした。実際に試してみたらうまくいきました。全体としてのコードは以下のようなものです。

$sql = "SELECT * FROM sqlite_master WHERE type='table' AND name='hoge'";

$request = $db->query($sql);

if (!$request->fetchRow()){

$sql = "CREATE TABLE hoge(

c1 VARCHAR(20),

c2 INT

)";

$request = $db->query($sql);

}

方法としては後者の方がスマートなので、"IF NOT EXISTS"としてテーブルがないときに作成するように使用してみましたが、"MDB2::Error: Array"と言われて使えないようでした。

2007/09/29 23:10:26

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません