【问题标题】:PDO DELETE also creates a new INSERTPDO DELETE 也会创建一个新的 INSERT
【发布时间】:2014-11-05 11:35:23
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    如果您使用的是 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));
    
    }
    

    【讨论】:

    • 非常感谢!使用占位符有效。仍然不知道为什么它插入了一封新电子邮件,但使用它可以。
    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多