2011-12-28 21 views
-1

奇妙なSQL構文エラーコードで

mysql_query("INSERT INTO Messages (Message, toUser, From, Date) VALUES ('$mes','$to','$from','$date')") 

私はSQLの構文エラーを取得しています。これの理由は何ですか?構文に間違いはありません。

+8

エラーとは何ですか? – BoltClock

+4

おそらくPHPの補間に依存します。 _actual_ MySQLクエリを表示する:問題を最小のコンポーネントに分割することは、デバッグの_key_要素です。 –

+2

そして、重要なことですが、重要なことです:[SQLインジェクション](http://en.wikipedia.org/wiki/SQL_injection)を見てください。 – Arjan

答えて

5

DATEはSQLの予約語なので、MySQLが列名以外のものとして解析しようとするため、列名として使用すると構文エラーが発生することがあります。

どちらのバッククォートを使用して識別子をエスケープ:

mysql_query("INSERT INTO `Messages` (`Message`, `toUser`, `From`, `Date`) VALUES ('$mes','$to','$from','$date')") 

以上、あなたはエスケープは必要ありません何か他のものに列の名前を変更することができます参照してください。

+0

+1:多くの区切りにベスト!少なくとも一貫性を持たせる。 –

+0

@Tomalak Geret'kal:Heh、もちろん - 固定: – BoltClock

+0

'Date'はSQLキーワードかもしれませんが、以前はフィールドリストのbackticksでそれを持っていないという問題は一度もありませんでした。 –

0

のように、クエリを作成します。エスケープが必要ですあなたの変数内の文字は、おそらくあります

//use mysql_real_escape_string for variables 
mysql_query("INSERT INTO Messages (`Message`, `toUser`, `From`, `Date`) VALUES ('$mes','$to','$from','$date')") 
1

私の推測では、誰かがこれこれが原因"O'Neil"'の構文エラーです

INSERT INTO Messages (Message, toUser, From, Date) VALUES ('Test','Joe O'Neil','Jack Smith','2011-12-20') 

のようなクエリを作成、変数の一つで'を入れています。 SQLで使用するには、変数をエスケープする必要があります。

$mes = mysql_real_escape_string($mes); 
$to = mysql_real_escape_string($to); 
$from = mysql_real_escape_string($from); 
$date = mysql_real_escape_string($date); 
mysql_query("INSERT INTO Messages (Message, toUser, From, Date) VALUES ('$mes','$to','$from','$date')");