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块即可执行。
感谢所有认真对待这个问题的人。
答案 0 :(得分:0)
事实上,多标准搜索以及条件创建的查询在Web开发中是一项非常简单的任务。
所以,你最好采用这种通用的方式,而不是走危险的角落,让用户自由地进行任何SQL注入。
创建一系列条件并根据用户的选择添加查询部分并不是一个问题。
但首先你要了解