问候溢出的同胞,
我正在使用 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 块,以便在查询成功完成后执行。
感谢所有认真对待这个问题的人。