我有这段代码不想工作,我不明白为什么...
$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,
));
我已经尝试搜索删除查询的示例,但我仍然不明白为什么,我的值不想从数据库中删除,我还检查了表的名称和数据库匹配,他们确实匹配。
最佳答案
您当前两次绑定(bind)变量 - 一次通过bindParam()
,然后再次作为execute( )
。您需要通过 bindParam()
或通过 execute()
一次绑定(bind)变量,但不能同时进行。
此外,删除的语法是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 中有额外的信息),但为了绑定(bind)两个字符串,任何一种方式都适用。
更新:
根据评论,您希望清空 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
));
SECURITY NOTE:
You should NEVER store passwords in plain-text, or by using poor methods of hashing (such asmd5()
,sha1()
, etc). It's simply not secure! PHP has built-in functions which you should use to handle storing of passwords, see thepassword_hash()
function which is a lot more secure!
关于php - PDO 删除查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45865149/