🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1026閲覧

sqlite3のテーブルを生成したい

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/03/04 01:04

編集2021/03/04 01:13

すみません。。
dbのテーブル作成について単純なミスだと思うのですが、うまく動かないので教えてください。

下記のコードで乱数を生成し$tablenameに格納後sqlite3のテーブルを作りたいです。
なぜか、デバックは通ってしまいますが、うまく動作はしておらず、テーブルは作成されていないようです。
うまく作成するための方法を教えてください。

php

1$db=new SQLite3(test.db) 2 3$arr[]=chr(mt_rand(97, 122)).chr(mt_rand(97, 122)).chr(mt_rand(97, 122)); 4$arr[]=mt_rand(0,10000); 5$arr[]=chr(mt_rand(97, 122)).chr(mt_rand(97, 122)).chr(mt_rand(97, 122)); 6$arr[]=mt_rand(0,10000); 7 $tablename=implode($arr); 8 $sql="CREATE TABLE $tablename( 9 id INTEGER NOT NULL, 10 view_name INTEGER NOT NULL, 11 message INTEGER NOT NULL, 12 post_date INTEGER NOT NULL, 13 PRIMARY KEY(id) 14);"; 15$db->exec($sql); 16$sql = "INSERT INTO $tablename(view_name,message,post_date) VALUES('吉川','コメント','時刻')"; 17$db->exec($sql);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/03/04 01:10

$db に関わる箇所のコードが見当たりませんので、提示お願いします。
退会済みユーザー

退会済みユーザー

2021/03/04 01:13

すみません。 張り付けるのを忘れていました。
m.ts10806

2021/03/04 01:47

そもそも1行目でPHPとして動かないのでは
guest

回答1

0

ベストアンサー

本当に動かしてるコードを貼ってますか?

$db=new SQLite3(test.db)

$db = new SQLite3('test.db');

のような気がしますが。

また、「デバックは通ってしまいますが、うまく動作はしておらず、テーブルは作成されていない」なら、
phpコードの文法チェックをしてください。
php.iniのdisplay_errorsやerror_reportingを強化することを強くオススメします。
PHPのエラー表示設定について - Qiita

SQLite3::execによると、
実行に成功するとtrueが返ってくるようなので、
慣れないうちは返り値をチェックしたらいいかもしれません。
SQLite3::lastErrorCode
SQLite3::lastErrorMsg
も駆使すると良いでしょう。

ところで、
id INTEGER NOT NULL
というカラムがあるのに、
$sql = "INSERT INTO $tablename(view_name,message,post_date) VALUES('吉川','コメント','時刻')";は成功しないんじゃないですかね、
idに誰が値を詰めるんですか?
view_nameやmessageやpost_dateも「INTEGER NOT NULL」なのに文字列を詰めようとしているとか、でたらめすぎます。
そういうでたらめなSQLはしっかり弾かれているってことでなくて?
Datatypes In SQLite Version 3によると、
文字列を扱うならTEXTってデータ型があります。

投稿2021/03/04 01:46

編集2021/03/04 01:57
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/03/04 06:01

ありがとうございます。データの型が問題でした。 idなのですが PRIMARY KEY(id) id INTEGER NOT NULL, を宣言しているため、記述がない場合は自動的に1,2,3...のように増えるのでは? うまく動いたため INSERT INTO $tablename(view_name,message,post_date) VALUES('吉川','hello',4)"; を入力していると、idのみ自動で増えていたのでそう思いました。
退会済みユーザー

退会済みユーザー

2021/03/04 06:15 編集

主キーの値の自動生成を指示するなら、「INTEGER PRIMARY KEY ASC」でいいようです。 詳しくは https://www.sqlite.org/lang_createtable.html ふだんsqlite3を使っていないので、初めて今回調べてみて勉強になりました。
退会済みユーザー

退会済みユーザー

2021/03/04 06:48

すみません。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問