简单的MySQL插入不起作用?

时间:2013-08-16 14:30:07

标签: php mysql

我有一个最奇怪的问题。我写了这个非常简单的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'。哪里是我的错?

3 个答案:

答案 0 :(得分:6)

您传递给查询的值未包含在引号内。当你不在引号内包含一个字符串时,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扩展名,而是使用pdomysqli

答案 1 :(得分:5)

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

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 injection atack”成为世界上最容易的事情。你应该从字符串scape一些字符来防止这种情况。并在PHP上对PDO进行一些研究,这个链接可以帮助here

答案 2 :(得分:-1)

您需要将字符串包装在引号中:

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