• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPによるMySQLクエリ文の操作での文字の取り扱いについて)

PHPによるMySQLクエリ文の操作での文字の取り扱いについて

このQ&Aのポイント
  • //テーブルレコードを追加するSQL文の組み立て $sql = "insert into $TNAME ("; for($i=1;$i<=$INCOMECNT;$i++){ $sql .= $income[$i] . ','; } for($i=1;$i<=$COLCNT;$i++){ $sql .= $item[$i] . ','; } $sql .= "contributor, nowdate, imgfilename, regdate, password, parent, parent2) values ("; for($i=1;$i<=$INCOMECNT;$i++){ $sql .= "\"$income[$i]\","; } for($i=1;$i<=$COLCNT;$i++){ $sql .= "\"$item[$i]\","; } $sql .="\"$contributor\", \"$nowdate\", \"$imgfilename\", now(), \"$crpassword\", \"$parent\")"; //SQLの発行 $rst = mysql_query($sql, $con);
  • 上記のソースコードを実行すると、insert文が正しく実行されません。カンマの扱い方やバックスラッシュの扱い方に問題があるのでしょうか。
  • 正しいinsert文を実行するためには、カンマの位置やバックスラッシュのエスケープが必要です。それぞれの変数を適切に処理し、SQL文を組み立てることが重要です。

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

  • ベストアンサー
回答No.4

"["や"]"の文字が原因でSyntaxErrorになってるようですね。 対象テーブルのフィールド名は本当に income[1],income[2]...なのでしょうか? テーブルのフィールド名の文字列の一部として"[","]"を使う必要がなければ、 income1,income2,.... に変えたほうが、今後も面倒なことにならないと思います。

sato777
質問者

お礼

[]は認識されないようですね。知りませんでした。 変更すると正常に動作しました。 本当に助かりました。又、勉強にもなりました。 心から感謝いたします。有難う御座いました。

その他の回答 (3)

回答No.3

デバッグを埋め込まれてはいかがでしょうか echo "sql=".$sql; $rst = mysql_query($sql, $con); echo mysql_errno().": ".mysql_error(); これで、実行前のsql文が見えるので、カンマ問題か否かの判断ができるはず。 後、エラーがあれば、メッセージでも確認できるはず。 # echoに関しては、標準出力がNGならばテンポラリなファイルに書き出す等やってみてはいかがでしょう。

sato777
質問者

補足

デバッグしてみましたが、原因がつかめません。 以下がデバッグレポートです。 sql=insert into kakeibo3 (income[1], income[2], item[1], item[2], item[3], item[4], item[5], item[6], contributor, nowdate, imgfilename, regdate, password, parent, parent2) values ('収入Y','収入W','食品','飲料/酒','外食','接待交際','公共料金','雑費','', '20050811', '0', now(), 'pa', '', '')1064: You have an error in your SQL syntax near '[1], income[2], item[1], item[2], item[3], item[4], item[5], item[6], contributo' at line 1 どこかケアレスミスがあるのでしょうか どうぞ宜しくお願い致します。

回答No.2

ちゃんとPGM読んでないのですが insert文のカラム数が一致していないのではないでしょうか value句では、now()が最後から3個目に対し、regdateは最後から4個目。 よって個数が違う、または、型のミスキャストを直してあげると動くのではないでしょうか

sato777
質問者

補足

記述間違いでした。すみません。 しかしながら、これをきちんと記述しても同じです。

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

ダブルクウォーテーションをシングルクウォーテーションにしたらどうなります? $sql .="\"$contributor\", \"$nowdate\", \"$imgfilename\", now(), \"$crpassword\", \"$parent\")"; ↓ $sql .="'$contributor', '$nowdate', '$imgfilename', now(), '$crpassword', '$parent')";

sato777
質問者

補足

もちろんうまくいきません