【发布时间】:2019-01-10 21:00:50
【问题描述】:
我有一个简单的脚本,可以在正常条件下理想地工作。出于测试目的,我试图让它抛出异常。这是一个 PHP PDO 插入。如果未插入新行,我希望它抛出异常。
这是我的代码:
$query = "INSERT INTO reservations (requestor, location)
VALUES (:requestor, :location)";
$statement = $pdo->prepare($query);
try {
$statement->execute([
'requestor' => $requestor_id,
'location' => $request_location
]);
echo "Success.";
}
catch(Exception $e) {
echo "Sorry, but your request was not completed properly.<br>";
echo "Message: " . $e->getMessage();
}
这非常有效。但是,如果我使用代码使其不起作用,通过更改表列名称或绑定参数,它仍然会给出成功消息。正如预期的那样,我没有插入新行。见下文:
$query = "INSERT INTO reservations (requestorzzz, locationzzz)
VALUES (:requestor, :location)";
$statement = $pdo->prepare($query);
try {
$statement->execute([
'requestorzzz' => $requestor_id,
'locationzzz' => $request_location
]);
echo "Thank you! Your request was received.";
}
catch(Exception $e) {
echo "Sorry, but your request was not completed properly.<br>";
echo "Message: " . $e->getMessage();
}
我确实收到了 php 错误消息,但没有抛出异常。没有创建新列(自然),但我需要它去捕获以通知用户他们的请求没有发生。是不是我做错了什么?
【问题讨论】:
-
将
prepare()也放入try块内。 -
好的,谢谢。请随时将这些 cmets 作为答案,我会支持它们。这些都有助于解决我的问题。
-
在我们的应用程序中,我们经常将整个脚本包装在一个大的
try块中,因此任何地方的任何 PDO 异常都会中止它。 -
感谢马克,但就个人而言,我认为它应该是(either) 一个社区 wiki 答案,而不是应该由 @AlexHowansky 和我留下的 cmets 做出代表。编辑: 或作为My PDO Statement doesn't work的副本关闭。