gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:19:37 25 4
gpt4 key购买 nike

大家好,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 block ,但它会停止执行代码。

$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 block 中,以便在查询成功完成后执行。

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

最佳答案

事实上,多标准搜索和有条件地创建查询在网络开发中是一项非常微不足道的任务。

所以,你最好按照这种通用的方式,不要走危险的弯路,任由用户随意进行SQL注入(inject)。

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

但首先你需要明白这一点

  • 查询不必旨在失败
  • 不得允许任何用户在您的查询中注入(inject) SQL

关于php - 测试 PDO 查询,如果失败,则执行其他操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16112235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com