测试PDO查询,如果失败,则执行其他操作

时间:2013-04-19 19:34:01

标签: php mysql pdo try-catch

Greflowings Overflowians,

我正在使用PHP PDO语句和MySQL。我有一个安全的管理表单,允许管理员输入MySQL查询的后半部分,然后保存到数据库中。例如,查询的第一部分是:

SELECT COUNT(1) AS count, SUM(`url_count`) AS total 
FROM `table_name` WHERE `tablekey_id` = 1

并且用户可以将以下内容保存到sql_count列中的数据库:

AND `row_is_live` = 1 AND `title` > '';

所以在我的程序中我想执行查询,但是当用户输入它时,查询可能会失败。所以我想测试看看查询是否会失败,如果它会那么我想做其他事情以便不停止我的程序。

这是我正在使用的代码。我正在尝试try catch块,但它会停止执行代码。

$table = new PatternsGenerator($baseDomain, true);
$sectionRowsQuery = $db->getTopLevelPatternRows($sectionId);
$returnArray = array();
$index = 1;

while ($row = $sectionRowsQuery->fetch()) {
    if(isset($row['sql_count']) && strlen($row['sql_count']) > 0) {
        try {
            $counts = $db->getCountsWithStoredQuery($row['sql_count']);
            throw new Exception("This is an exception");
        } catch (Exception $e) {
            $counts = array('total' => 1, 'count' => 0);
        }
    } else {
        $counts = array('total' => 0, 'count' => 0);
    }

    $table->getTopLevelRow_1($returnArray, $row['title'], $counts, $row['id'], $index);
    $index++;
}

... more code ....

我的问题是,如何在不停止执行其余代码的情况下测试MySQL查询以查看它是否会失败?拜托,谢谢大家。


编辑:

好的,我发现了问题。函数getCountsWithStoredQuery($ storedQuery)试图fetchAll()。因此,如果查询失败,则在其上执行fetchAll()并且程序失败。在查询成功完成后,我只需将fetchAll()移动到try块即可执行。

感谢所有认真对待这个问题的人。

1 个答案:

答案 0 :(得分:0)

事实上,多标准搜索以及条件创建的查询在Web开发中是一项非常简单的任务。

所以,你最好采用这种通用的方式,而不是走危险的角落,让用户自由地进行任何SQL注入。

创建一系列条件并根据用户的选择添加查询部分并不是一个问题。

但首先你要了解

  • 无需查询失败
  • 不允许任何用户在您的查询中注入SQL
相关问题