Mysql INSERT INTO无法正常工作 - 语法正确

时间:2012-08-20 09:22:00

标签: php mysql insert

我有这个简单的插入查询,似乎输出了一个我找不到的错误,它让我疯狂:(

有人会帮助我。

错误是:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `User_Id`='16'' at line 1

查询是:

$insert = "INSERT INTO `pf_users` (`Task4`,`Task5`,`Task6`,`Task7`) VALUES ('$task4','$task5','$task6','$task7') WHERE `User_Id`='$GetUser'";

这是php代码:

if(empty($_POST) === false) {
    $task4 = sanitize($_POST['task4']);
    $task5 = sanitize($_POST['task5']);
    $task6 = sanitize($_POST['task6']);
    $task7 = sanitize($_POST['task7']);

    $GetUser = $_SESSION['User_Id'];

    //Query not inserting into database
    $insert = "INSERT INTO `pf_users` (`Task4`,`Task5`,`Task6`,`Task7`) VALUES ('$task4','$task5','$task6','$task7') WHERE `User_Id`='$GetUser'";

    echo "<pre>".$insert."</pre>";

    mysql_query($insert) or die(mysql_error()); 
}

清理功能为mysql_real_escape_string()$task值正在接收表单数据。

感谢。

4 个答案:

答案 0 :(得分:7)

您不能在插入中使用where子句。

当您插入一行时,它只会添加所有内容。

如果要更新现有记录,然后,请使用where子句标识要更新的记录。

$insert = "INSERT INTO `pf_users` (`Task4`,`Task5`,`Task6`,`Task7`) VALUES ('$task4','$task5','$task6','$task7')";

$update = "update `pf_users` set `Task4`='$task4',`Task5`='$task5', `Task6`='$task6', `Task7`='$task7' where `User_Id`='$GetUser'";

编辑:由于我有太多的赞成这么简单的答案,我最好更新一点。 mySQL中有一种语法可以让你进行插入和更新 - 或者更确切地说它会选择你需要做的事情。它被称为“插入...复制键”,如下所示:

$insertOrUpdate="insert into pf_users (task4, task5, task6, task7) values ('$task4', '$task5', '$task6', '$task7')
    on duplicate key update task5='$task5', task6='$task6', task7='$task7'";

要使用此功能,您需要定义一个密钥 - 这可以是主密钥或复合密钥。语法尝试插入一行,如果违反了键限制,则更新它将插入的行。在上面的示例中,我假设task4是主键,因此在查询的更新部分中省略了它。

答案 1 :(得分:1)

在sql语句中删除WHERE。但您可以在WHERE声明中使用INSERT...SELECT

也许您想使用UPDATE

UPDATE  `pf_users`
SET `Task4` = '$task4'
    `Task5`= '$task5'
    `Task6`= '$task6'
    `Task7` = '$task7'
WHERE `User_Id`='$GetUser'

答案 2 :(得分:0)

您应该使用update代替insert

$insert = "UPDATE `pf_users` SET `Task4`='$task4',`Task5`='$task5'.... WHERE `User_Id`='$GetUser'";

答案 3 :(得分:0)

insert query从不包含where子句,如果你想使用它。你必须使用更新查询。 你也可以使用它: -

$update = "UPDATE `pf_users` (`Task4`,`Task5`,`Task6`,`Task7`) VALUES ('$task4','$task5','$task6','$task7') WHERE `User_Id`='$GetUser'";
$result = mysql_query($update);

或者你可以使用它。

$insert = "INSERT INTO `pf_users` SET `Task4` = '".mysql_real_escape_string($task4)."',`Task5`= '".mysql_real_escape_string($task5)."',`Task6`= '".mysql_real_escape_string($task6)."',`Task7`='".mysql_real_escape_string($task7)."'";
$result = mysql_query($insert);

您可以根据需要进行编辑。希望它会对你有所帮助。我试着让你尽可能简单。安全功能在这个脚本中可能不太好,你必须为此做更多的事情。