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扩展并使用pdoormysqli代替。

于 2013-08-16T14:34:25.083 回答
6

您将字段用户(字符串)作为非字符串插入试试这个:

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 查询上使用 post info,这使得“sql injection atack”成为世界上最简单的事情。您应该从字符串中转义一些字符以防止这种情况。并在 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 回答