これ何て呼びますか Part2

すいません。
PHPで SQL文を書いていてエラーが起こります。

$IT_db = mysqlconnect($DBSERVER,$DBUSER,$DBPASSWORD);
mysql_select_db($DBNAME, $IT_db);

$SQL="INSERT INTO" . $TABLENAME . "(aa,bb,cc,dd,ee,ff,gg,hh) values('$BUMEI','SHIMEI','DENWA','TATE','YOKO',now())";

$Res = mysql_query($SQL,$IT_db);

-------------------------------------------------

この記述だと実行しても データベースに値が入ってくれません。

曖昧ですが、なにか 間違ったところがあれば教えてください

A 回答 (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 == "送信");
この一行も 何もしていない飾りですよね?

なんか、もう いろいろ異次元過ぎて。。
    • good
    • 1
この回答へのお礼

>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にデータを入れることが出来ました。

お礼日時:2010/06/08 19:53

> Query was empty



んんん?
もしかして、yambejpさんが 提示した物をコピペしました?
$SQL(大文字)に入れてて、$sql(小文字) だと 空っぽなので、このエラーじゃないですか?

> INSERT INTO test1 (bb,cc,dd,ee,ff,gg,) valueS ('','','','','','',now())

「gg,」のトコ、カンマで終わってます。now()が入るべきフィールド名がありません。

この回答への補足

返事ありがとうございます。
携帯で返信したらダメですね。
今までの返答を書かせてもらいます。

#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= "失敗";
}

返答お待ちしております。

補足日時:2010/06/07 20:28
    • good
    • 0

$res=mysql_query($sql) or die($sql.mysql_error());



で、デバッグしてみてください。

この回答への補足

返事ありがとう御座います。
先ほどの補足(bb~gg)を(い~き)に変更です。先ほど気づきました。申し訳ございません。

デバックしたところ
Query was empty
と出力されました。

補足日時:2010/06/07 12:38
    • good
    • 0

え~とですね。

。。#2さんが言っていたのは、以下のようにしてくださいって事です。

$SQL= "INSERT INTO" . $TABLENAME . "(あ,い,う,え,お,か,き) valueS('$bb','$cc','$dd','$ee','$ff','$gg',now())";
print $sql; // ←←←←←←←←←←←←←←←← ここ
$Res = mysql_query($SQL,$IT_db);

んで、表示された SQL文を 提示して欲しいと言うことです。

正直、$TABLENAME の 中身の前後に空白を入れているというやり方をしているとは 予想外でした。

この回答への補足

返事ありがとう御座います。

INSERT INTO test1 (bb,cc,dd,ee,ff,gg,) valueS ('','','','','','',now())

と出力されました。

補足日時:2010/06/07 09:36
    • good
    • 0

多分、ここで質問するにあたって、手書きしたのでしょうが、ツッコみどころ満載です。


アンダースコアがなかったりスペースがなかったり$が抜けているのだろうと思われたりするのは、手書きした際のミスなんだろうと脳内変換します。

#2さんも言っておられるように、コピペして、見られたくない部分を置換したものを貼り付けてもらったほうが、正確なツッコみが期待できるかと思われます。

この回答への補足

返事ありがとうございます。
見られたくない部分、置換してみます。
今までのソース無視してください。汗 変数名変えたので。

$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がちゃんと動いてないんですよね?

返答お待ちしてます。

補足日時:2010/06/06 20:25
    • good
    • 0

INSERT INTOと$TABLENAMEの間に半角スペースが無かったりしませんか?



mysql_queryの前に$SQLを出力して、それをそのままコピペ(見られて困るデータなら何かしらに置き換え)してもらうと何かわかるかもしれません。

この回答への補足

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

補足日時:2010/06/06 20:26
    • good
    • 0

SQLのフィールドと値の数が合っていないのが気になりますね。


その通りであれば少なくともSQLエラーにはなりそうな。
とりあえずエラーメッセージを確認してはどうでしょう。

この回答への補足

すいません。ちゃんとかけてないですね。
訂正
values('$BUMEI','$SHIMEI','$DENWA','$MAIL','$TATE','$YOKO',now())";
です。

この記述のあとにEmailの記述が書いてあります。
XAMPPを使用です。

(aa,bb,cc,dd,ee,ff,gg,hh) はデータベースの名前と揃えているのですがうまいこといきません。

補足日時:2010/06/04 22:21
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報