错误检查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();

}

}

两件事情。首先,这是非常冗长而愚蠢的。肯定有更好的办法。显然,我可以将布尔值存储在数组或其他东西中,以取出一行或两行代码,但是仍然可以。

其次,是否甚至有必要检查这些值,还是应该在执行以下代码后检查结果:

$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()。所以也许我根本不需要检查上面的逻辑?请记住,我在程序的前面检查了数据库连接是否成功。

回答:

我倾向于将错误模式设置为引发如下异常:

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

在我连接到数据库之后。因此,每个问题都会引发PDOException,因此您的代码将是:

$selectQuery = '

SELECT

' . implode($allFields, ', ') . '

FROM

People

WHERE

' . $fieldName . ' = :value

';

try

{

$selectQueryResult = $db->prepare($selectQuery);

selectQueryResult->bindParam(':value', $fieldValue);

$selectQueryResult->execute();

}

catch(PDOException $e)

{

handle_sql_errors($selectQuery, $e->getMessage());

}

函数将在哪里:

function handle_sql_errors($query, $error_message)

{

echo '<pre>';

echo $query;

echo '</pre>';

echo $error_message;

die;

}

实际上,我正在使用一个通用功能,该功能也有类似

$debug = debug_backtrace();

echo 'Found in ' . $debug[0]['file'] . ' on line ' . $debug[0]['line'];

告诉我如果我正在运行多个查询,问题出在哪里

以上是 错误检查PDO准备的语句 的全部内容, 来源链接: utcz.com/qa/397942.html

回到顶部