• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:すいません。)

PHPでSQL文を書いていてエラーが発生する

このQ&Aのポイント
  • PHPでSQL文を書いている時にエラーが発生しています。データベースに値が入ってきません。
  • エラーの原因を特定するために、間違いがあれば教えてください。
  • MySQL関数を使用してデータベースへの接続とクエリの実行を行っています。

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

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

正直、提示されているソースに、いろいろ違和感を感じるのですが、乗りかかった船ですので、回答したいと思います。 とりあえず、以下の点、補足お願いします。 > Query was empty 原因は何でした? > データベースとPHPの文字のエンコドがあってなかったみたいで すべてsjisにしました。 んー、俺の知る範囲では、文字化けが起こる程度ですよ? > INSERT INTO test1 (あ,い,う,え,お,か,き) values ('','','','','','',now()) 置き換えたものとばかり思ってましたが、フィールド名が まさかの日本語? > $SQL = "SET CHARACTER SET "sjis"//←追加行 本当に これ実行したら パースエラーでますよね? > $TABLENAME = " test1 "; 少なくとも、俺の発想の中には 変数の中身の前後に 空白を入れるというのは、このケースではありえません。こうしている理由があるのでしたら、ぜひ教えて欲しいものかと。。 > print $aa; //←ここだったらちゃんとPOSTデータを出力する。 > IF($hh == "送信"); > print $aa; //←ここだったら 出力しない。 これは、正直 ありえません。 この通りに書いて、この通りの動きだとしたら、完全に俺の回答できる範疇を超えます。 > IF($hh == "送信"); この一行も 何もしていない飾りですよね? なんか、もう いろいろ異次元過ぎて。。

ryuuha3173
質問者

お礼

>Query was empty そのままコピペしたので、エラでした。 ちゃんと$SQLにかえたら You have an an error in your SQL syntax; check the manual that corresponds to your MySQL server version for right syntax to use near 'あ,い,う,え,お,か,き) values('','','','','','',now())' at line 1 が出力されました。 > INSERT INTO test1 (あ,い,う,え,お,か,き) values ('','','','','','',now()) 日本語だったりしますね。 > $SQL = "SET CHARACTER SET "sjis"//←追加行 セミコロンぬけてますね。汗 > IF($hh == "送信"); なぜIF文にいったら出力されない理由がわかりましたので、 $aa~$hh までは ちゃんと$_POSTでしたが。 確認画面の値をとばす方が$HTTP_POST_VARSになっておりました。 これではちゃんと値が入らないわけです。 これを修正後 エラーもおきず すんなりとDBにデータを入れることが出来ました。

その他の回答 (6)

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

> Query was empty んんん? もしかして、yambejpさんが 提示した物をコピペしました? $SQL(大文字)に入れてて、$sql(小文字) だと 空っぽなので、このエラーじゃないですか? > INSERT INTO test1 (bb,cc,dd,ee,ff,gg,) valueS ('','','','','','',now()) 「gg,」のトコ、カンマで終わってます。now()が入るべきフィールド名がありません。

ryuuha3173
質問者

補足

返事ありがとうございます。 携帯で返信したらダメですね。 今までの返答を書かせてもらいます。 #2さん print $SQL; 結果 INSERT INTO test1 (あ,い,う,え,お,か,き) values ('','','','','','',now()) #5さん $Res=mysql_query($SQL) or die($SQL.mysql_error()); 結果 You have an an error in your SQL syntax; check the manual that corresponds to your MySQL server version for right syntax to use near 'あ,い,う,え,お,か,き) values('','','','','','',now())' at line 1 皆さんの意見とかを聞きながら試行錯誤した結果 エラーがなくなりました。 データベースとPHPの文字のエンコドがあってなかったみたいで すべてsjisにしました。 IF文もちゃんと通りましたが、INSERTはまだ未解決です。 データが空白のまま データベースに保存されている状態です。 なぜかIF文の中に入るとデータが出力されません。 $DBSERVER = "localhost"; $DBUSER = "root"; $DBPASSWORD = ""; $DBNAME = "test"; $TABLENAME = " test1 "; ----------------------- $aa = $_POST["aa"]; $bb = $_POST["bb"]; $cc = $_POST["cc"]; $dd = $_POST["dd"]; $ee = $_POST["ee"]; $ff = $_POST["ff"]; $gg = $_POST["gg"]; $hh = $_POST["hh"]; print $aa; //←ここだったらちゃんとPOSTデータを出力する。 IF($hh == "送信"); print $aa; //←ここだったら 出力しない。 $IT_db = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); mysql_select_db($DBNAME, $IT_db); $SQL = "SET CHARACTER SET "sjis" //←追加行 $Res = mysql_query($SQL,$IT_db); //←追加行 $SQL= "INSERT INTO" . $TABLENAME . "(あ,い,う,え,お,か,き) valueS( '$bb','$cc','$dd','$ee','$ff','$gg',now())"; $Res=mysql_query($SQL) or die($SQL.mysql_error()); //←追加行(変更) IF($Res) { ・・・略 $Msg1= "完了"; }Else{ $Msg1= "失敗"; } 返答お待ちしております。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.5

$res=mysql_query($sql) or die($sql.mysql_error()); で、デバッグしてみてください。

ryuuha3173
質問者

補足

返事ありがとう御座います。 先ほどの補足(bb~gg)を(い~き)に変更です。先ほど気づきました。申し訳ございません。 デバックしたところ Query was empty と出力されました。

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

え~とですね。。。#2さんが言っていたのは、以下のようにしてくださいって事です。 $SQL= "INSERT INTO" . $TABLENAME . "(あ,い,う,え,お,か,き) valueS('$bb','$cc','$dd','$ee','$ff','$gg',now())"; print $sql; // ←←←←←←←←←←←←←←←← ここ $Res = mysql_query($SQL,$IT_db); んで、表示された SQL文を 提示して欲しいと言うことです。 正直、$TABLENAME の 中身の前後に空白を入れているというやり方をしているとは 予想外でした。

ryuuha3173
質問者

補足

返事ありがとう御座います。 INSERT INTO test1 (bb,cc,dd,ee,ff,gg,) valueS ('','','','','','',now()) と出力されました。

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

多分、ここで質問するにあたって、手書きしたのでしょうが、ツッコみどころ満載です。 アンダースコアがなかったりスペースがなかったり$が抜けているのだろうと思われたりするのは、手書きした際のミスなんだろうと脳内変換します。 #2さんも言っておられるように、コピペして、見られたくない部分を置換したものを貼り付けてもらったほうが、正確なツッコみが期待できるかと思われます。

ryuuha3173
質問者

補足

返事ありがとうございます。 見られたくない部分、置換してみます。 今までのソース無視してください。汗 変数名変えたので。 $DBSERVER = "localhost"; $DBUSER = "root"; $DBPASSWORD = ""; $DBNAME = "test"; $TABLENAME = " test1 "; ----------------------- $aa = $_POST["aa"]; $bb = $_POST["bb"]; $cc = $_POST["cc"]; $dd = $_POST["dd"]; $ee = $_POST["ee"]; $ff = $_POST["ff"]; $gg = $_POST["gg"]; $hh = $_POST["hh"]; IF($hh == "送信"); $IT_db = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); mysql_select_db($DBNAME, $IT_db); $SQL= "INSERT INTO" . $TABLENAME . "(あ,い,う,え,お,か,き) valueS( '$bb','$cc','$dd','$ee','$ff','$gg',now())"; $Res = mysql_query($SQL,$IT_db); IF($Res) { ・・・略 $Msg1= "完了"; }Else{ $Msg1= "失敗"; } ----------------------- DBのテーブル名も 『あ,い,う,え,お,か,き』にしてあります。 ----------------------- 変数宣言したあとに DB接続出来るかチェックしてみましたがちゃんと 接続は出来ています。毎回、Elseに飛ぶと言う事は、$Resがちゃんと動いてないんですよね? 返答お待ちしてます。

  • duron
  • ベストアンサー率77% (73/94)
回答No.2

INSERT INTOと$TABLENAMEの間に半角スペースが無かったりしませんか? mysql_queryの前に$SQLを出力して、それをそのままコピペ(見られて困るデータなら何かしらに置き換え)してもらうと何かわかるかもしれません。

ryuuha3173
質問者

補足

返答ありがとうございます。 #3の方に 書き直しさせてもらいました。

  • Li2CO3
  • ベストアンサー率54% (6/11)
回答No.1

SQLのフィールドと値の数が合っていないのが気になりますね。 その通りであれば少なくともSQLエラーにはなりそうな。 とりあえずエラーメッセージを確認してはどうでしょう。

ryuuha3173
質問者

補足

すいません。ちゃんとかけてないですね。 訂正 values('$BUMEI','$SHIMEI','$DENWA','$MAIL','$TATE','$YOKO',now())"; です。 この記述のあとにEmailの記述が書いてあります。 XAMPPを使用です。 (aa,bb,cc,dd,ee,ff,gg,hh) はデータベースの名前と揃えているのですがうまいこといきません。

関連するQ&A

専門家に質問してみよう