2011-06-21 4 views
-7

私はとても馬鹿だと感じますが、私はエラーを見つけることができません... ありがとう。ここで このSQL文で何が問題になっていますか?

$l_sSql = 'INSERT INTO ftb2010_winners ("first_name", "last_name", "email", "dob", "token", claimed_status) VALUES (\''.$l_aData['firstName'].'\',\''.$l_aData["lastName"].'\',\''.$l_aData["email"].'\',\''.$l_aData["year"].'-'.$l_aData["month"].'-'.$l_aData["day"].'\', "token", 0;'; 

は私が

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"first_name", "last_name", "email", "dob", "token", claimed_status) VALUES ('Phi' at line 1

編集... [OK]を、おかげでそれを実行すると、エラーである...それを得た、そう私はそれが何かは、私が行方不明になったことをstuipidを知っていた

+8

実行するとエラーが表示されます。 – BoltClock

+1

読みにくくて理解しにくい – Rahul

+1

mysql拡張機能を使用している場合に備えて** prepared statements **を使用できない場合は、神の愛のために少なくとも 'sprintf'を使用してクエリをフォーマットしてください。また、すべてを1行にまとめる必要はなく、SQLに改行を入れることもできます。 –

答えて

5

最初のエラー:。。フィールド名がなければなりませんまた、引用符で囲まれていないバッククォートで囲まれていてもかまいません(フィールド名が予約済みのSQLワードであるか特殊文字が含まれている場合にのみバッククォートが必要です)。それら)

2番目のエラー:クエリの最後にブラッシングがありません。

考えられるエラー:使用しているすべての変数が正しくエスケープされていることを確認してください。そうしないと、コードがSQLインジェクション攻撃に対して脆弱になります。 (実際にあなたのコードを見なくても実際に問題があるのか​​どうかは分かりません)

スタイルの問題:一重引用符と二重引用符の間には、つまり、あなたの値の中には一重引用符で囲まれたもの、二重引用符で囲まれたものがあります。一貫してください。また、それらのエスケープされた一重引用符はすべて、すべてを非常に読みにくくします!

5

あなたの値に1つの閉じ括弧がありません。

+1

また、フィールド名は二重引用符ではなく、バッククォートで囲む必要があります。 –

5

最後に閉じ括弧 ")"がありません。

4

MySQLでは、フィールド名とテーブル名を二重引用符で囲まずにバッククォートで囲む必要があります。

だから、それは次のようになります。

INSERT INTO ftb2010_winners (`first_name`, `last_name`, ... 
3

あなたは"であなたれる列名を入れないでください。

INSERT INTO ftb2010_winners (first_name, lastname, ....) 

と行方不明)

2
  • ofcourseのあなたは脱出するべきではありませんデータを囲むティック (')。あなたのデータの中でダニ/アポストロフィーをエスケープするはずです。
  • フィールド名はバッククォート( `)ではなく、二重引用符(")で囲む必要があり
  • あなたは文の終わりに終わり括弧が欠落している
関連する問題