PDO 预准备语句的错误检查
我正在尝试使用PDO预准备语句为MySQL数据库上的查询创建正确的错误处理。我希望程序在检测到预准备语句进程中的错误时退出。利用 PDO 预准备语句进程中的每个步骤在失败时返回的事实,我把这个令人厌恶的黑客放在一起:False
global $allFields;
global $db;
global $app;
//dynamically append all relevant fields to query using $allFields global
$selectQuery = 'SELECT ' . implode($allFields, ', ') .
' FROM People WHERE ' . $fieldName . ' = :value';
//prepared statement -- returns boolean false if failure running query; run success check
$success = $selectQueryResult = $db->prepare($selectQuery);
checkSuccess($success);
$success = $selectQueryResult->bindParam(':value', $fieldValue, PDO::PARAM_STR);
checkSuccess($success);
$success = $selectQueryResult->execute();
checkSuccess($success);
通过执行以下操作:checkSuccess()
function checkSuccess($success) {
if ($success == false) {
//TODO: custom error page.
echo "Error connecting to database with this query.";
die();
}
}
两件事。首先,这是非常冗长和愚蠢的。一定有更好的方法。显然,我可以将布尔值存储在数组或其他东西中,以取出一行或2行代码,但仍然如此。
其次,是否有必要检查这些值,或者我应该在执行这行代码后检查结果:
$result = $selectQueryResult->fetch(PDO::FETCH_ASSOC);
我已经有代码可以做到这一点:
if ($result) { //test if query generated results
// do successful shit
}
else {
echo "404";
$app->response()->status(404); //create 404 response header if no results
尽管我试图通过插入奇怪的,不匹配的或冗长的查询来中断预准备语句进程,但我的程序总是能够到达赋值,而不会返回我运行的任何函数。所以也许我根本不需要检查上面的逻辑?请记住,我在程序的前面检查了成功的数据库连接。$result
false
checkSuccess()