我有这个代码,不想工作,我不明白为什么......
$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,
));
我已经尝试搜索删除查询的示例,但我仍然无法理解为什么,我的值不想从数据库中删除,我还检查了表的名称和名称数据库匹配,他们这样做。
答案 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
));