3

私は最も奇妙な問題を抱えています。私はこの非常に単純なINSERTクエリを書きました:

if(isset($_POST['putUser'])) {
    $user = $_POST['user'];
    $amount = $_POST['amount'];
    $what = $_POST['what'];
    $country = $_POST['country'];
    $platform = $_POST['platform'];

    $query = mysql_query('INSERT INTO sells(id, user, amount, what, country, platform) VALUES (NULL , '.$user.', 1, 1, 1, 1)');
    if($query) {
        echo 'ok';
    } else {
        die(mysql_error());
    }
}

そして、それは機能しません。1例のように、代わりにすべての値を入力すると機能します$user。ただし、変数が存在する場合、エラーがスローされますUnknown column 'Test username' in 'field list'。私の間違いはどこですか?

4

3 に答える 3

7

クエリに渡した値は引用符で囲まれていません。文字列を引用符で囲まないと、mysql はそれがフィールド名であると見なします。また、文字列をエスケープするのを忘れています。

$query = mysql_query('INSERT INTO sells (id, user, amount, what, country, platform) '
      . 'VALUES (NULL , "' . mysql_real_escape_string($user) . '", 1, 1, 1, 1)');

mysql最後に、拡張機能の使用から移行して、代わりにpdoorを使用する必要がありmysqliます。

于 2013-08-16T14:34:25.083 に答える
6

フィールド user(string) を非文字列として挿入しています これを試してください:

if(isset($_POST['putUser'])) {
    $user = mysql_real_escape_string($_POST['user']);
    $amount = $_POST['amount'];
    $what = $_POST['what'];
    $country = $_POST['country'];
    $platform = $_POST['platform'];

    $query = mysql_query('INSERT INTO sells(id, user, amount, what, country, platform) VALUES (NULL , "'.$user.'", 1, 1, 1, 1)');
    if($query) {
        echo 'ok';
    } else {
        die(mysql_error());
    }
}

誰もがコメントで言うように、投稿情報を mysql クエリで直接使用するべきではありません。これにより、「SQL インジェクション攻撃」が世界で最も簡単になります。これを防ぐには、文字列から一部の文字をエスケープする必要があります。そして、PHP上のPDOについていくつかの調査を行います このリンクはここで役立つかもしれません

于 2013-08-16T14:31:48.703 に答える
0

文字列を引用符で囲む必要があります。

$query = mysql_query('INSERT INTO sells(id, user, amount, what, country, platform) VALUES (NULL , "'.$user.'", 1, 1, 1, 1)');
于 2013-08-16T14:33:49.310 に答える