• ベストアンサー

sqlite+phpでのテーブル作成

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

  • anbsd
  • お礼率85% (18/21)
  • PHP
  • 回答数4
  • ありがとう数7

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

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.4

「エラーが無い」のではなく、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実行はされないし、エラーもでません。

anbsd
質問者

お礼

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

その他の回答 (3)

noname#243182
noname#243182
回答No.3

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

参考URL:
http://www.sqlite.org/faq.html#q7
anbsd
質問者

お礼

ありがとうございます。

  • okweb-goo
  • ベストアンサー率29% (283/952)
回答No.2

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

anbsd
質問者

お礼

ありがとうございます。

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

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

anbsd
質問者

お礼

ありがとうございます。

関連するQ&A

  • HP上からのPHPによるSQLiteの読み込み

    表題のとおり、PHPでsqliteのDBにアクセスして、表示しようと考えています。 サーバーに以下の内容を書いた、result.phpというファイルを置いて、ページを開きました。 <html> <body> <h3>テスト</h3> <?php try{ $db = new SQLite3('sqlit.db'); $result = sqlite_query($db, "SELECT * FROM table"); $db->close(); } catch (PDOException $e) { print "エラー!: " . $e->getMessage() . "<br/>"; } ?> </body> </html> すると、以下のエラーが出ました。 Warning: sqlite_query() expects parameter 1 to be resource, object given in /home/(ファイル置いてある場所)/result.php on line 7 sqlit.dbは適当に作ったファイルで中身はどうでもいいのですが、 エラー内容で検索したところ、一つ目の引数のdb形が違うよーみたいな意味のようですが、解決策がわかりません。 ためしにsqlit.dbを適当な名前にしたところ、その適当な名前のファイルの名前は出てきましたが、 エラー内容は同じでした。 つまり、new SQLite3は実行できている=PHPでSQLのファイルの作成、読み込みは出来ている。 しかし、テーブル名が違うとかといった内容ではなく、型が違う、といわれ困っています。 同じ階層に置いた「php.ini」に以下の3行を記載し、配置してあります。 extension=php_pdo_sqlite.dll extension=php_sqlite.dll extension=php_pdo.dll しばらく調べたのですが、phpそのものが実行されないとか、dbファイルがないといった状況なら調べられそうではあるのですが、実行は出来たけど読み込もうとするとエラーになる。 といわれ調べても情報が出てこず困っています。 何かエラーの可能性になる部分や、調べ方がありましたら教えてください。 ちなみにファイルを置いてあるのはさくらインターネットのサーバーでして、 PHPの設定は「PHP 5.3.8 (CGI版) 」にしてあります。

    • 締切済み
    • PHP
  • phpでテーブルを作る際変数によってテーブル名を変えたいです。

    phpでテーブルを作る際変数によってテーブル名を変えたいです。 文字列$nama(tarou,jirou等)、 整数$iの中身によって作るテーブル名が tbl_tarou_1、tbl_tarou_2、tbl_jirou_5と変わるプログラムを作りたいのです。 当方初心者なので以下のプログラムを改変するような形でお答えいただけないでしょうか。 回答よろしくお願いいたします。 $db = sqlite_open("db"); $query = "CREATE TABLE tb(xyz VARCHAR(20))"; $result = sqlite_query($db,$query_statics); sqlite_close($db);

    • ベストアンサー
    • PHP
  • phpからsqlite3にアクセスできない

    windows7-64bit IIS7でphp(5.6.30)+sqlite3で動かしていますが、 php.iniには extension=php_pdo_sqlite.dll extension=php_sqlite3.dll を記述し、 phpinfoには PDO support : PDO drivers PDO Driver for SQLite 3.x : SQLite Library とextに反映されてそうです。 しかしphpからDBにアクセスしようとすると、定義されていませんとエラーになります。 [undefined function sqlite_open()] sqlite_open( sqlite_popen( new SQLite3( のどれもエラーとなります。 どのようにしたら接続できるのでしょうか?

    • ベストアンサー
    • PHP
  • SQLiteでのDateTimeの扱い

    SQLiteのデータベースにphpで値を保存したいのですが、カラムのタイプがdatetimeだと上手くいきません。 現在の時刻をSQLiteに書き込むということをしたいです。 カラムのタイプをdatetimeからtextに変更するのは避けたいので、下のphpを変更して書き込めるようにするにはどうすれば良いのでしょうか? 詳しい方よろしくお願いします。 SQLite DB ---- CREATE TABLE "dt" ("ID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,"REGIST" DATETIME) ---- PHP ---- $sqlite = 'SQLiteへのパス'; $db = new PDO($sqlite); $now = date('Y-m-d H:i:s'); $nfe = $db->prepare('insert into dt(REGIST) values(?)'); $nfe->execute(array($now)); ----

  • php,sqlのテーブル作成について

    php,sql文について質問があります。 現在、テキストボックスに文字を入力したら、DBにその名前のテーブルを新規作成するプログラミングに挑戦中なのですが、 以下のプログラミングでは、テーブルが作成されません どこ を直したらいいのでしょうか? php,sqlに詳しい方どうかご教授お願い致します。 <?php try{ $dbh = new PDO('mysql:host=localhost;dbname=aaaa','bbbb','cccc'); }catch (PDOException $e){ var_dump($e->getMessage()); } $stt = $db->prepare('CREATE TABLE date( abcID char(6) )' ); echo'テーブルを新規作成しました'; ?> ちなみに以下のプログラミグでデーターベースに接続出来ることは確認しております <?php try{ $dbh = new PDO('mysql:host=localhost;dbname=aaaa','bbbb','cccc'); } catch(PDOException $e){ var_dump($e->getMessage()); exit; } echo'DBに接続しました'; ?>

    • 締切済み
    • PHP
  • phpからsqliteにselect抽出

    phpからsqliteにselect抽出しています。 $sql = "select * from Table where C=?" $st = $db->prepare($sql); $st->bindParam(1, $key, PDO::PARAM_STR); $st->execute(); while ($row = $st->fetch(PDO::FETCH_ASSOC)) { *** *** } でエラーにはなりませんが、データがとれません。 updateやinsertで?(インジェクション)はうまくいくのですが、Selectでなぜ取得できないのでしょうか? bindParamをarrayにしたりprepare をqueryにしたりしましたが、 データが1件しか取れなかったりします。

    • ベストアンサー
    • PHP
  • SQLiteのデータベースについて

    PHP初心者です。以下のSQLiteより作成するデータベースについて教えてください。 $DB = sqlite_open('db1.db'); $sql="create table tables(id integer ,name,texts)"; $result=sqlite_query($db,$SQL); 上記、プログラムにより、同ディレクトリに、db1.dbが作成されますが、このデータベース情報はどのようにして、閲覧するのでしょうか(MS-ACCESS、SQLのように簡単に閲覧できないのか)。主キーやテーブルの名前またはフィールドの名前の変更、データ一覧閲覧などどのようにするのでしょうか。 環境は、Windows環境で、PHP4を使用しております。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • (PHP 4.4.8) sqlite_open関数の引数を相対パスにしたいのですが上手くいきません。

    PHP 4.4.8 SQLite Library 2.8.14 の環境で、 sqlite_open関数の引数を相対パスにしたいのですが上手くいきません。 (例)create_db.php <?php $db = sqlite_open("../db_test"); //←ここでエラーが出ます。 $query = "CREATE TABLE tbl_test(id,aaa,bbb)"; $result = sqlite_query($db,$query); sqlite_close($db); ?> ネットで調べた所、sqlite_open()は引数に「相対パス(or絶対パス)」を入れることは可能であり、 かつ、「../db_test」が無い場合、作られる仕組みということです。 エラー表示: Warning: sqlite_open() [function.sqlite-open]: unable to open database (...以下略) ちなみに、上記のコードにおいて、 「../db_test」ではなく、「db_test」として同じことをすると、上手くいきます。 つまり、スクリプトファイル(create_db.php)と同階層にファイルを作成することはできるのです。 $db = sqlite_open("db_test");   //← ○:ファイル作成成功 $db = sqlite_open("../db_test"); //← ×:ファイル作成失敗 どなたかご助言をよろしくお願い致します。

    • ベストアンサー
    • PHP
  • yahooウィジェットのSQLiteに関して

    どうしてもわからず、質問させてください。 INSERTの所で 1 near "[i]" :syntax error と出てしまいます。 配列にはちゃんとデータが入っていることを確認しました。 どこがおかしいのかお分かりになる方すいませんが、お願いします。 またyahooウィジェットのSQLiteはトランザクションは使えるのか知っている方いましたら合わせてお願いいたします。 ▼ソースは以下のようなものです var db = new SQLite(); //オープン db.open( "オーブンファイル名" ); //テーブル存在確認 var result = db.query( "SELECT * FROM sqlite_master WHERE type='table' AND name='テーブル名'" ); if ( result.getRow() == null ) { result.dispose(); db.exec( "CREATE TABLE テーブル名(id int(10),name varchar(255))" ); FileRead( "ファイル読み込み" ); for (var i in lineArray) { alert(lineArray[i]); db.exec( "INSERT INTO テーブル名(id, name) VALUES(i, lineArray[i])" ); } } db.close;

  • PHP・SQLite3文字化け

    いつもお世話になります。 PHP Version 5.3.5 とSQLite3を使用して 簡単なプログラムを勉強中なのですが・・・ <?php echo ("テストテーブル参照<br />"); try { $dbh = new PDO('sqlite:testdb'); $res = $dbh->query( 'SELECT * FROM test'); while( $row = $res->fetch( PDO::FETCH_ASSOC ) ) { var_dump( $row ); } } catch( PDOException $e ) { echo 'Connection failed: ' . $e->getMessage(); } ?> 上記のプログラムを実行すると次のように表示されます。 テストテーブル参照 array(3) { ["id"]=> string(3) "001" ["name"]=> string(12) "螻ア荳九€€豬ゥ" ["adress"]=> string(12) "逾槫・亥キ晉恁" } array(3) { ["id"]=> string(3) "002" ["name"]=> string(15) "逋ス逾槭€€蜥御ケ・ ["adress"]=> string(9) "蝓シ邇臥恁" } テーブルtestには3フールドあり 全て文字列型なのですが、数字は正しく表示されますが、漢字が表示されません。 どなたかご教示頂けますでしょうか。 何卒よろしくお願い致します。

    • ベストアンサー
    • PHP