0
$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 语句后,查询正在将数据插入数据库。什么是错误。

4

3 回答 3

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."'

如果没有匹配的电子邮件,则第二个语法将插入一行(同样,这必须设置为表上的唯一约束),如果已经有一个,它会将数据更新为您的值通过了。

于 2012-09-12T07:24:55.727 回答
5

基本上INSERT声明不能有where。唯一的 timeINSERT语句可以在 where 使用 using 时INSERT INTO...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 ....

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

还有一件事,使用PDOMYSQLI

使用 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();

?>

这将允许您使用单引号插入记录。

于 2012-09-12T07:25:19.040 回答
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");
于 2012-09-12T07:32:36.473 回答