PDO删除查询不起作用

时间:2017-08-24 15:10:12

标签: php mysql pdo

我有这个代码,不想工作,我不明白为什么......

$DeleteT=$con->prepare("DELETE Examples FROM USERS WHERE Email=:Email AND Pass=:Pass");
$DeleteT->bindParam(':Pass', $Pass);
$DeleteT->bindParam(':Email', $Email);
$DeleteT->execute(array(
      ':Email' => $Email,
      ':Pass' => $Pass,
));

我已经尝试搜索删除查询的示例,但我仍然无法理解为什么,我的值不想从数据库中删除,我还检查了表的名称和名称数据库匹配,他们这样做。

3 个答案:

答案 0 :(得分:4)

您目前正在绑定变量两次 - 一次通过bindParam(),然后再次作为execute()的参数。您需要通过bindParam()execute()绑定变量一次,但不能同时绑定两者。

此外,删除语法为DELETE FROM...,而非DELETE column FROM...

所以它看起来像这样,通过execute()

绑定它们
$DeleteT = $con->prepare("DELETE FROM USERS WHERE Email=:Email AND Pass=:Pass");
$DeleteT->execute(array(
  ':Email' => $Email,
  ':Pass' => $Pass
));

或者,如果您想使用bindParam() ...

$DeleteT = $con->prepare("DELETE FROM USERS WHERE Email=:Email AND Pass=:Pass");
$DeleteT->bindParam(':Pass', $Pass);
$DeleteT->bindParam(':Email', $Email);
$DeleteT->execute();

要么是为了这个目的,选择你最喜欢哪一个。如果您需要,PDOStatement::bindParam()还有其他选项(下面链接的documentation中有相关信息),但为了绑定两个字符串,两种方式都适用。

<强>更新
根据评论,您希望清空Examples列。这意味着您要UPDATE行,而不是DELETE。下面的示例将Example列设置为空字符串(假设它是text或varchar列,并接受字符串)。如果您希望将其设置为NULL或其他值,请将其修改为此类。

$DeleteT = $con->prepare("UPDATE USERS SET Examples=:example WHERE Email=:Email AND Pass=:Pass");
$DeleteT->execute(array(
  ':example' => '', 
  ':Email' => $Email,
  ':Pass' => $Pass
));
  

安全提示
  您应始终以纯文本格式存储密码,或使用不良的散列方法(例如md5()sha1()等)。 它根本不安全! PHP有内置函数,您应该使用它们来处理密码存储,请参阅更安全的password_hash()函数!

答案 1 :(得分:1)

您绑定了需要在$Delete而不是$DeleteT上绑定的错误变量

这就是你需要的

$DeleteT=$con->prepare("DELETE Examples FROM USERS WHERE Email=:Email AND Pass=:Pass")->execute(array(':Email' => $Email,':Pass' => $Pass));
  

PS:请注意,上的额外':Pass' => $Pass,));将其删除。也不要以纯文本形式存储密码,请使用password_hash()和password_verify()

答案 2 :(得分:1)

您的删除语法不是标准,应为delete from tableName ...

    $DeleteT=$con->prepare("DELETE FROM USERS WHERE Email=:Email AND Pass=:Pass");
    $DeleteT->execute(array(
      ':Email' => $Email,
      ':Pass' => $Pass
    ));