我的SQL代码中的错误在哪里

时间:2012-09-12 07:23:58

标签: php mysql sql

$fname = addslashes($fname);
$lname = addslashes($lname);
$dob = addslashes($dob);
$email = $_POST['email'];
$sql = 
 "INSERT INTO subscriber 
    (fname, lname, dob) 
  VALUES
    ('".$fname."', '".$lname."', '".$dob."') 
  WHERE email='".$email."'";

$register = mysql_query($sql) or die("insertion error");

我在sql查询“插入错误”中收到错误。查询是在删除WHERE语句后将数据插入DB。错误是什么。

3 个答案:

答案 0 :(得分:9)

您不能在插入语句中使用where。您可能正在考虑更新?

$sql = "update subscriber set fname='".$fname."', lname = '".$lname."', dob = '".$dob."'  WHERE email='".$email."'";

如果您的电子邮件是唯一值,您还可以将插入内容与以下更新结合使用:

insert into 
    subscriber (fname, lname, dob, email) 
    values ('".$fname."', '".$lname."', '".$dob."', '".$email."') 
        on duplicate key update set fname='".$fname."', lname='".$lname."', dob='".$dob."'

如果没有匹配的电子邮件,则第二种语法将插入一行(同样,必须将其设置为表上的唯一约束),如果已经有一个,则会将数据更新为你传递的价值。

答案 1 :(得分:5)

基本上INSERT语句不能有。使用INSERT的唯一时间INSERT INTO...SELECT语句可以包含在哪里。

select语句的唯一语法是

INSERT INTO TableName VALUES (val1, val2, ..., colN)
and
INSERT INTO TableName (col1, col2) VALUES (val1, val2)

另一个是

INSERT INTO tableName (col1, col2)
SELECT col1, col2
FROM tableX
WHERE ....

基本上它所做的就是所有选中的记录都将被插入到另一个表中(也可以是同一个表)。

还有一件事,请使用 PDO MYSQLI

使用PDO扩展的示例:

<?php

    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
    $stmt->bindParam(1, $name);
    $stmt->bindParam(2, $value);

    // insert one row
    $name = 'one';
    $value = 1;
    $stmt->execute();

?>

这将允许您插入带单引号的记录。

答案 2 :(得分:1)

哎呀!!!!您不能在WHERE语句中使用INSERT子句。 如果您要定位特定行,请使用UPDATE

$sql = "Update subscriber set fname = '".$fname."' , lname = '".$lname."' , dob = '".$dob."' 
WHERE email='".$email."'";
$register = mysql_query($sql) or die("insertion error");