前提・実現したいこと
簡単な掲示板を作っています。
ユーザーに入力された値をバインドしprepare、exce等をし最後にfetchArray()で出力したいです。
発生している問題・エラーメッセージ
Warning: SQLite3::prepare(): Unable to prepare statement: 1, near "15": syntax error in Uncaught Error: Call to a member function bindValue() on null in
該当のソースコード
php
1 2$name=$_POST['name']; 3 4$main=$_POST['main']; 5 6// 書き込み日時を取得 7$now = date("Y/m/d H:i:s"); 8$db = new SQLite3("test.db"); 9 10$arr[]=chr(mt_rand(97, 122)).chr(mt_rand(97, 122)).chr(mt_rand(97, 122)); 11$arr[]=mt_rand(0,10000); 12$arr[]=chr(mt_rand(97, 122)).chr(mt_rand(97, 122)).chr(mt_rand(97, 122)); 13$arr[]=mt_rand(0,10000); 14 $tablename=implode($arr); 15 echo $tablename; 16 $sql="CREATE TABLE $tablename( 17 id INTEGER NOT NULL, 18 view_name TEXT NOT NULL, 19 message TEXT NOT NULL, 20 post_date INTEGER NOT NULL, 21 PRIMARY KEY(id) 22)"; 23$db->exec($sql); 24 25$sql = "INSERT INTO $tablename(view_name,message,post_date) VALUES(:name,:main,$now)"; 26 27$db->prepare($sql); 28 29$res->bindValue(':name',$name,SQLITE3_TEXT); 30 31$res->bindValue(':main',$main,SQLITE3_TEXT); 32 33$res->execute(); 34 35 $sql="SELECT * FROM $tablename"; 36 $res = $db->query($sql); 37 while( $row = $res->fetchArray() ) { 38 echo '<ul> ' . ' <li> '.$row[0].'</li>'. ' <li> '.$row[1].'</li>'. 39 ' <li> '.$row[2].'</li>'. ' <li> '.$row[3].'</li>'. ' <li> '.$row[4].'</li>'. 40 '</ul>';} 41
html
1 2<h2>入力欄</h2> 3 <div class="form-wrapper"><form action="" method="post"> 4 5 <div class="form-item"> 6 7 <label for="name"></label> 8 9 <input type="text" name="name" required="required" placeholder="表示名"></input> 10 11 </div> 12 <label for="main"></label> 13 14 <input type="text" name="main" required="required" placeholder="コメントする(必須)"></input> 15 16 </div> 17 <div class="button-panel"> <input type="submit" class="button" name="btn_confirm" value="依頼する"></input> </div> 18 </form> 19
$sql = "INSERT INTO 〜" の $now をシングルクオートで囲んで '$now' とすれば良いのでは。
ありがとうございます。
別プログラムでも同じようなことをしているのですが、そこではシングルクオートがなくても動いています。
ご回答いただいたものも試してみたのですが別のエラーが出てしまいました。
一応
Uncaught Error: Call to a member function bindValue() on null in
$res に値が入ってないですね。$res = $db->prepare($sql); かな。(変数名は $res よりも $stmt の方がいいと思うけど。)
post_date INTEGER NOT NULL, 数値の型に文字列とか日付文字列とか入れようとしてるの?
ありがとうございます。post_date INTEGER NOT NULLは日付(数字の文字列)なのでINTEGER型で扱われないのでしょうか?
$now = date("Y/m/d H:i:s");
まず、直にSQL実行して想定の結果を得られてからにしては?
ありがとうございます。
$nowデータもバインドしたところうまく動いたのですが、たまたまでしょうか?
回答1件
あなたの回答
tips
プレビュー