2012-05-06 9 views
0

では、私はこの使用して文字列がないようにMySQL

$sql=mysql_query("SELECT EMAIL FROM USERNAME WHERE EMAIL <> '".$_REQUEST['EMAIL']."' AND EMAIL NOT IN (".$str.")") or die("Error: ". mysql_error(). " with query ". $sql); 

例えば$ strの値「D」、「F」を保持し、私の表のEMAIL列でDとfが存在しています。

私はこのエラーを取得クエリを実行すると、「エラー:クエリで 『where句』に不明な列 『d』を」

を私はので、私は、私はちょうど非常に何かが欠けている願っていますMySQLへの完全なnoobのです基本的なここに。どんな助けでも大歓迎です!

答えて

2

ニースSQL injection穴があります。あなたのサーバーを持ってお楽しみくださいpwn3d。

IN構文はどちらかの作品

あなたは「そのような dを取得していないしているが与えられ
WHERE field IN (value1, value2, value3, ...) 

または

WHERE value IN (field1, field2, field3, ...) 

として、あなたはおそらく

を生産、それらの値を引用し忘れています
WHERE field IN (d, f) 

「フィールドd」および「フィールドf」として解釈される場合、wherそれはshoul E:

WHERE field IN ('d', 'f') 

注引用符 - 彼らはそれらにDとFの文字列ではなく、フィールド名を回します。

+0

私が理解していないthats()の間の変数は 'd'、 'f'に設定されていると確信しています – IceSteve

+0

と感謝します。実際にはmysql_real_escape_stringを使用して昨日私のファイルをすべて調べてみてください。 – IceSteve

0

には、の部分の後ろに一重引用符がありません。それは次のようになります。また

$sql = mysql_query(" 
     SELECT EMAIL FROM USERNAME WHERE EMAIL <> '".$_REQUEST['EMAIL'] 
     ."' AND EMAIL NOT IN ('".$str."')" 
    ) or die("Error: ". mysql_error(). " with query ". $sql); 

、マルクが指摘したように、あなたはより良いあなたがあなたのクエリ内に置くつもりだクライアント変数のmysql_real_escape_string()を使用しています。

+0

私はちょうどこれを試してみました。「エラー:あなたのSQL構文に誤りがあります。正しい構文を使用するにはMySQLサーバのバージョンに対応するマニュアルをチェックしてください。 1行目のクエリ「 – IceSteve

+0

」に「d」、「f」など)があります。私の悪いことに、$ strにはシングルクォートのテキストがある可能性については考えていませんでした –

関連する問題