PDO DELETE还会创建一个新的INSERT

时间:2014-11-05 11:35:23

标签: php mysql pdo sql-insert sql-delete

我有一个奇怪的问题,每次我做一个简单的DELETE查询来删除WHERE email =。出于某种原因,删除后它还使用相同的电子邮件进行新的INSERT?在任何地方都没有INSERT,也没有触发器...有人知道为什么会这样吗?该表格包含emailnr auto_increment

$check_email = $_POST['email'];

$query = "SELECT `email` FROM `newsletter` WHERE email = '$check_email';";
$sth = $dbh->prepare($query);
$sth->execute();
$row = $sth->fetch(PDO::FETCH_ASSOC);
$check_users_email = $row['email'];

if($check_users_email != ''){
    $query_update = "DELETE FROM `newsletter` WHERE email = '$check_users_email';";
}

$sth = $dbh->prepare($query_update);
$sth->execute();

删除前:email = test@email.com | NR = 1

删除后:email = test@email.com | NR = 2

1 个答案:

答案 0 :(得分:0)

它可能在您的sql字符串中,因为您正在使用预准备语句。 在PDO中,您应该使用命名或未命名的占位符。然后在准备查询之后,在执行语句时将prams作为数组传递。

如果您正在使用PDO,则无需使用单引号。只是列名和搜索值只使用占位符,然后将执行时的值作为数组传递。

注意:我在'if'语句中重命名了PDO对象$ sth,以避免名称冲突。我也在'if'语句中移动了最后两行,因为你需要sql字符串'$ query_update'的值,如果该语句返回false,它将不可用。

还要检查变量$ check_users_email是否为空,可以使用empty()或strlen()。

试试这个:

    $check_email = $_POST['email'];

$query = "SELECT email FROM newsletter WHERE email = :check_email";

$sth = $dbh->prepare($query);

$sth->execute(array(':check_email' => $check_email));

$row = $sth->fetch(PDO::FETCH_ASSOC);

$check_users_email = $row['email'];

if($check_users_email != ''){

    $query_update = "DELETE FROM newsletter WHERE email = :check_users_email";
    $sth2 = $dbh->prepare($query_update);
    $sth2->execute(array(':check_users_email' => $check_users_email));

}