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);

たとえば、$str は値 'd','f' を保持し、私のテーブルの EMAIL 列には ad と f があります。

クエリを実行すると、「エラー: 不明な列 'd' in 'where clause' with query」というエラーが表示されます

私はmysqlの完全な初心者なので、ここで非常に基本的なものが欠けていることを願っています. どんな助けでも大歓迎です!

4

2 に答える 2

2

素晴らしいSQL インジェクションホールがあります。サーバー pwn3d をお楽しみください。

IN構文は次のいずれかとして機能します

WHERE field IN (value1, value2, value3, ...)

また

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

「no such」を取得していることを考えるとd、おそらくそれらの値を引用するのを忘れており、

WHERE field IN (d, f)

これは、「フィールド d」および「フィールド f」として解釈されます。

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

引用符に注意してください。これらの d と f は、フィールド名ではなく、文字列に変換されます。

于 2012-05-06T23:30:10.750 に答える
0

NOT IN部分の後に一重引用符がありません。そのはず:

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

また、Marc が指摘したように、クエリ内に配置するクライアント変数でmysql_real_escape_string()を使用することをお勧めします。

于 2012-05-06T23:34:11.663 に答える