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