PDO删除查询不起作用
我有这样的代码,不想工作,我不明白为什么...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,
));
我已经试图寻找例如删除查询的,但我仍然不明白为什么,我的价值不希望从数据库中删除,我也检查表的名称和数据库的名称是否匹配,他们这样做。
您正在绑定变量两次。您需要将变量绑定一次,可以是bindParam()
或,但不能同时绑定两个变量。
此外,删除的语法是DETLETE FROM...
,而不是DELETE column FROM...
。
所以它会无论是这个样子,结合他们通过
$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
));
安全注意:
你应该NEVER存储密码以纯文本,或通过使用散列的差方法(如md5()
,sha1()
等)。 这根本不安全! PHP有内置的函数,您应该使用它来处理密码的存储,请参阅password_hash()
函数,它更加安全!
你是在你需要在$Delete
结合的$DeleteT
,而不是错误的变量绑定这就是你需要
$DeleteT=$con->prepare("DELETE Examples FROM USERS WHERE Email=:Email AND Pass=:Pass")->execute(array(':Email' => $Email,':Pass' => $Pass));
PS:注意在
':Pass' => $Pass,));
额外,
删除它。通过bindParam()
一次,然后再次作为参数- 也没有明文存储密码,请使用password_hash()和password_verify()
对不起,我错误地输入了代码,但它仍然不起作用。无论如何坦克你的答案! –
然后写上正确的代码,否则我们不会解决问题@ A.Rossi –
您的删除语法不规范,应该是delete from tableName
...
$DeleteT=$con->prepare("DELETE FROM USERS WHERE Email=:Email AND Pass=:Pass");
$DeleteT->execute(array(
':Email' => $Email,
':Pass' => $Pass
));
**从来都不是平坦存储文本密码!**请使用*** PHP' s [内置函数](http://jayblanchard.net/proper_password_hashing_with_PHP.html)***来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用'password_hash()'[兼容包](https://github.com/ircmaxell/password_compat)。 ***在散列之前,不需要[escape passwords](http://stackoverflow.com/q/36628418/1011527)***或使用其他任何清理机制。这样做*更改密码并导致不必要的附加编码。 –
你首先绑定,然后再次使用相同的参数执行? – Qirel
您可以绑定参数或执行数组,而不是两者。 –