【发布时间】:2012-05-18 08:21:00
【问题描述】:
我找到了许多方法来使用 PDO 的 exec 语句,但我不确定它是否对我有帮助。我的理解是我必须对准备好的语句使用 execute() 函数。我正在使用来自用户输入的数据更新一行,所以我想使用准备好的语句而不是 query() 调用。
我的代码如下:
$dbh = buildDBConnector();
$sql = "UPDATE tb_users
SET authState=1
WHERE id = ? AND authPass = ?";
$q = $dbh->prepare($sql);
$f = $q->execute(array($id,$authPass));
if($f){
echo '<br />Success<br />';
}else{
echo '<br />Failure<br />';
}
问题是查询本身没有错误并且执行良好,因此没有失败存储在 $f 中。但是,我需要知道它是否真的找到要更新的行,然后成功更新它。换句话说,我需要受影响的行。当谷歌搜索等时,它不断出现在 exec 语句中,但据我了解, exec 不是用于准备好的语句?有什么建议吗?
【问题讨论】:
-
警告:如果值已经设置(更新执行两次,可能来自双击提交按钮)第二次会导致错误,即使数据是美好的。为了用户体验,之后做一个 select 语句来查看记录是否存在并且值正确
select authState from tb_users where id = ? and authPass = ?可能更可靠。没有结果意味着 id 或密码不存在。 (附:我希望你对密码进行哈希处理!看看 pbdkf2!)
标签: php mysql pdo prepared-statement