考虑到 PDO 的推荐错误模式是
ERRMODE_EXCEPTION
,因此没有直接的
execute()
结果验证将起作用。由于代码执行甚至不会达到其他答案中提供的条件。因此,有三种可能的情况可以处理 PDO 中查询的执行结果:1.如果要告知成功,则无需验证。只需继续程序流程即可。2.为了处理意外错误,请保持相同 - 不需要立即处理代码。如果出现数据库错误,那么会抛出异常,并将上升到站点范围的错误处理程序,最终导致一个常见的 500 错误页面。3.要处理预期的错误(如重复主键),如果您有某个特定的场景来处理此特定错误,则使用
try..catch
运算符。对于普通的 PHP 用户来说,这听起来有点陌生 - 怎么会不验证操作的直接结果呢?-但这正是异常的工作方式-在其他地方检查错误。一次性解决问题。非常方便。因此,在简单的代码中,您根本不需要任何错误处理。只需保持您的代码不变:
$stmt->bindParam(':field1', $field1, PDO::PARAM_STR);
$stmt->bindParam(':field2', $field2, PDO::PARAM_STR);
$stmt->execute();
echo "Success!"; // whatever
如果成功,它会告诉您; 如果出现错误,它将显示您的应用程序为此类情况展示的常规错误页面。
仅在有处理场景的情况下,除了报告错误之外,请将您的插入语句放在 try..catch
操作符中,检查是否是您预期的错误并进行处理;或者 - 如果错误不同 - 重新抛出异常,以便可以通过站点范围的错误处理程序通常方式处理它。以下是我在使用PDO处理错误的文章中的示例代码:
try {
$pdo->prepare("INSERT INTO users VALUES (NULL,?,?,?,?)")->execute($data);
} catch (PDOException $e) {
if ($e->getCode() == 1062) {
// Take some action if there is a key constraint violation, i.e. duplicate name
} else {
throw $e;
}
}
echo "Success!";
在上面的代码中,我们检查特定的错误以采取一些行动,并重新抛出异常以处理任何其他错误(例如,没有这样的表),这将报告给程序员。
然而,如果只是告诉用户诸如“您的插入操作成功”之类的信息,则
不需要任何条件。
$stmt->execute()
,可以这样写:if ($stmt->execute()) { //true }
。 - GavinPDOStatement->execute()
和PDOStatement->errorCode()
是否完全一致?在什么情况下,PDOStatement->errorCode()
会有返回值,但是PDOStatement->execute()
返回true吗?或者PDOStatement->execute()
返回false但是PDOStatement->errorCode()
没有返回任何值? - datasn.io