【问题标题】:Mysql INSERT INTO not working - syntax correctMysql INSERT INTO 不起作用 - 语法正确
【发布时间】:2012-08-20 09:21:59
【问题描述】:

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

有人能帮我吗。

错误是:

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 值正在接收表单数据。

谢谢。

【问题讨论】:

  • 总是选择参数化查询而不是转义的东西。
  • You have an error in your SQL syntax; 表示你的 SQL 语法HAVE有错误,再去搜索也没用。

标签: php mysql insert


【解决方案1】:

您不能在插入中使用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 中有一种语法可以让您 both 插入和更新 - 或者更确切地说,它会选择您需要做的事情。它被称为“在重复键上插入...”,如下所示:

$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 是主键,因此在查询的更新部分中省略了它。

【讨论】:

  • 确实,如果您使用 WHERE,那么您可能正在考虑 UPDATE 而不是 INSERT
【解决方案2】:

删除你的 sql 语句中的WHERE。但是你可以在INSERT...SELECT 语句中使用WHERE

也许你想使用UPDATE

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

【讨论】:

    【解决方案3】:

    您应该使用update 而不是insert

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

    【讨论】:

      【解决方案4】:

      insert 查询从不包含 where 子句,如果你希望它使用 .you 必须使用 update 查询。 你也可以使用这个:-

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

      您可以根据需要对其进行编辑。希望它会帮助你。我尽量让你变得简单。此脚本中的安全功能可能不太好,您必须为此做更多工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-27
        • 1970-01-01
        • 1970-01-01
        • 2020-03-26
        相关资源
        最近更新 更多