PDO,错误更新依旧没有异常
PDO, wrong update still no exception
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;
}
该句子更新由 KEYWORDNAME
和 DOCUMENT_ID
标识的给定行。
我发送了错误的关键字名称(不存在)但存在的文档 ID。
不应该抛出记录未找到的异常并回滚操作吗?
它总是成功并返回 true(我也看到 var_dump)
PS: 这是代码的最后一部分。
不,您只是在 WHERE
条件不匹配时更新 0
行。更新、选择等 0
行不是错误,这些都是正常的数据库操作。
检查 rowCount()
以查看更新了多少行并相应地进行处理。
就数据库(以及 PDO)而言,这不是错误。您执行了更新语句,并成功更新了 0 行。
如果您想将此作为错误处理,则必须手动执行:
$res = $pdo->commit();
if ($pdo->rowCount() == 0) {
# some exception treatment
}
不匹配任何记录的查询不是错误。这只是一个空结果集,这是一个完全有效的结果。
唯一一次您从查询中得到异常是查询本身是否存在实际问题,与数据库的连接等...例如数据库中的语法错误、连接失败、您正在访问的 table(s) 的权限被拒绝等...
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;
}
该句子更新由 KEYWORDNAME
和 DOCUMENT_ID
标识的给定行。
我发送了错误的关键字名称(不存在)但存在的文档 ID。
不应该抛出记录未找到的异常并回滚操作吗? 它总是成功并返回 true(我也看到 var_dump)
PS: 这是代码的最后一部分。
不,您只是在 WHERE
条件不匹配时更新 0
行。更新、选择等 0
行不是错误,这些都是正常的数据库操作。
检查 rowCount()
以查看更新了多少行并相应地进行处理。
就数据库(以及 PDO)而言,这不是错误。您执行了更新语句,并成功更新了 0 行。
如果您想将此作为错误处理,则必须手动执行:
$res = $pdo->commit();
if ($pdo->rowCount() == 0) {
# some exception treatment
}
不匹配任何记录的查询不是错误。这只是一个空结果集,这是一个完全有效的结果。
唯一一次您从查询中得到异常是查询本身是否存在实际问题,与数据库的连接等...例如数据库中的语法错误、连接失败、您正在访问的 table(s) 的权限被拒绝等...