PDO 是执行语句期间受影响的行

2022-08-30 13:46:15

我已经找到了很多方法将exec语句用于PDO,但我不确定它是否对我有帮助。我的理解是,我必须对预准备语句使用 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不是用于准备语句吗?有什么建议吗?


答案 1

请尝试 $q->rowCount())。预准备语句将通过该方法返回受影响的行数。


答案 2

附注:更新具有相同值的表时,将始终返回。这是正常行为。从 PHP 5.3 开始,您可以通过创建具有以下属性的 PDO 对象来自行更改它:rowCount()0

<? php
$p = new PDO($dsn, $user, $pass, array(PDO::MYSQL_ATTR_FOUND_ROWS => true));
?>

然后,将返回更新查询实际找到/匹配的行数。rowCount()


推荐