いつも質問や回答を拝見しています。
最近会社で必要なためphpを勉強し始めた初心者です。
何か質問に失礼や不備があれば改善しますので、お伝えくださいますと幸いです。
前提・実現したいこと
本を参考にphpでミニ掲示板を作成しています。
その際DBへの登録処理でエラーが出てしまい困っております。
エラー箇所を見つけるのに、お力を貸していただきたいと思っています。
発生している問題・エラーメッセージ
Warning: PDOStatement::execute() [function.PDOStatement-execute]: message: Incorrect syntax near '('. (severity 15) in /var/www/html/ono/hi/join/check.php on line 18 Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/ono/hi/join/check.php:18) in /var/www/html/ono/hi/join/check.php on line 21
header部分のエラーについては、executeのエラーによって何らかの文字が
出力されたために起こっているのではないかと考えています。
ですので、とりあえずexecute部分について解消したいです。
該当のソースコード
php
1<?php 2session_start(); 3require('../dbconnect.php'); 4 5if (!isset($_SESSION['join'])) { //5行目 6 header('Location: index.php'); 7 exit(); 8} 9 10if (!empty($_POST)) { 11 // 登録処理 この下から 12 $statement = $db->prepare('INSERT INTO mini_bbs( 13 name, 14 email, 15 password, 16 picture, 17 created 18 ) 19 VALUES (?, ?, ?, ?, GETDATE())'); //ここまで本来12行目 20 echo $ret = $statement->execute(array( 21 $_SESSION['join']['name'], 22 $_SESSION['join']['email'], 23 sha1($_SESSION['join']['password']), 24 $_SESSION['join']['image'] 25 )); //※エラー箇所 18行目 26 unset($_SESSION['join']); 27 28 header('Location: thanks.php'); //21行目 29 exit(); 30} 31?>
こちらに掲載するにあたって、SQL文が長くなり見づらくなったため改行を入れております。
そのため行数が少し変わっておりますので、コメントにて大まかな行数を付け加えています。
試したこと
〇自分のコードの書き方が悪いのかと思い、付録としてDLしたソースコードを貼り付けてみましたが同じエラーが出ました。
INSERT文の中身のみ使用しているSQLserverに合わせて書き換えておりますが、
それ以外の部分はDLしたものをそのまま貼り付けています。
〇見たところ間違ってはいないと思ったのですが、気づいていないだけで
()が多い・足りない箇所があるのかと思い18行目の閉じ括弧を1,2,3個にしてみましたが、やはり改善しませんでした。
補足情報(FW/ツールのバージョンなど)
php(5.3以前)
※会社のサーバーを使っており、はっきりとしたバージョンが分かりません。
申し訳ありません……。
SQLserver2012
他にページ全体のコードや、index.phpのコードが必要でしたら掲載いたします。
どの情報が解決に必要か判断しきれず申し訳ない限りですが、
どうかお力添えいただけますと幸いです。
よろしくお願いいたします。
###追記(修正等)
・SELECT文で試す
→試してみたのですが表示されないため、もしかしたら接続で何か躓いているのかもしれません……
dbconnect.php
php
1<?php 2try { 3 $db = new PDO('dblib:dbname=mini_bbs;host=****;charaset=Shift-Jis','****','**********'); 4} catch(PDOException $e) { 5 echo 'DB接続エラー: '.$e ->getMessage(); 6} 7?>
表示するために元のファイルの中に書いたphp
php
1$members = $db -> query('SELECT * FROM members'); 2while ($member = $members -> fetch()) { 3print($record['email']. "\n");
・echoしたあとheader効かない
→headerは何かを読み込む前、との認識だったので不思議に思いながらも、
何度か改訂された本の情報なので大丈夫なのかな、と思い特に編集せず書いております。
使えるのであればなぜ使えるのか調べよう、と思っておりました。
・全角の何かが入っている
→teratailに記載するにあたり、長くて見づらくなったため、
こちらのエディタで改行したところ入ってしまったようです。紛らわしいことをして申し訳ありません。
・使う予定のSQL
SQL
1INSERT INTO mini_bbs (name, email, password, picture, created) VALUES('test','test','test',NULL,GETDATE())
こちらを利用してみたところ、SQLserverでは通るものの、php側ではエラーが出ました。
以下該当箇所の記述(それ以外は変更していません)とエラー内容です。
php
1$statement = $db->prepare('INSERT INTO members (name, email, password, picture, created) VALUES('wawaaa','wawawaaa','waaa',NULL,GETDATE())'); //12行目
syntax error, unexpected T_STRING in /var/www/html/ono/hi/join/check.php on line 12
文章のおかしな点など多々あると思います、申し訳ありません。
少し気持ちが焦っているので、見当違いなことをしていましたらご指摘くださいますと助かります。
回答2件
あなたの回答
tips
プレビュー