PDO,错误的更新仍然没有例外

时间:2015-01-14 17:52:48

标签: php mysql pdo sql-update

try {
     $query = 'UPDATE keywords SET value = :keyvalue WHERE keyword = :keyname AND document_id = :docId';
     $pdo   = _openConnection();
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     $pdo->beginTransaction();
     $pdoStatement = $pdo->prepare($query);
     foreach ($keywords as $keyname => $keyval) {
        $pdoStatement->bindParam(':docId', $id, PDO::PARAM_STR);
        $pdoStatement->bindParam(':keyname', $keyname, PDO::PARAM_STR);
        $pdoStatement->bindParam(':keyvalue', $keyval, PDO::PARAM_STR);
        $pdoStatement->execute();
     }
     $res = $pdo->commit();
     var_dump('retornando true', $res);
     return true;
} catch (PDOException $e) {
     $pdo->rollBack();
     echo $e->getMessage();
     return false;
}

该句子更新由KEYWORDNAMEDOCUMENT_ID标识的给定行。 我发送了一个错误的关键字名称(不存在)但存在文档ID。

不应该为找不到的记录抛出异常并回滚操作吗? 它总是成功并返回true(我也看到了var_dump)

PS:这是代码的最后一部分。

3 个答案:

答案 0 :(得分:3)

不,您只是在0条件不匹配时更新WHERE行。更新,选择等等0行不是错误,这些都是正常的数据库操作。

检查rowCount()以查看更新的行数并相应地处理。

答案 1 :(得分:3)

就数据库(以及PDO)而言 - 这不是错误。您执行了更新语句,并成功更新了0行。

如果您想将此处理为错误,则必须手动执行此操作:

$res = $pdo->commit();
if ($pdo->rowCount() == 0) {
    # some exception treatment
}

答案 2 :(得分:2)

与任何记录不匹配的查询 NOT 错误。它只是一个空结果集,这是一个非常有效的结果。

您从查询中获得异常的唯一时间是查询本身是否存在实际问题,与数据库的连接等等...数据库中的语法错误,连接失败,您正在访问的任何表上的权限被拒绝等等......

相关问题