我有一个尝试块,其中一些例外将肯定抛出但如果发生这种情况,我不想停止执行try块。
这是代码:
try {
$queryStr = "SELECT * FROM `$current_table` WHERE ...";
$query = $db->prepare($queryStr);
$query->execute();
while($row = $query->fetch()) {
}
} catch(PDOException $e) {
//echo $e->getMessage();
}
这个try / catch块在for循环中,因此$current_table
将不断变化。现在,此当前表格可以包含4个值april-june-2014
,july-september-2014
,october-december-2014
和jan-march-2015
。这些表名存储在一个数组中。
现在它将查询第一个表并且是否找到它,那么它很好但是如果找不到,那么我想检查其他表并查看它们是否存在。如果找不到任何表,它将抛出异常,然后它不会检查其他表。
有办法吗?
答案 0 :(得分:1)
使用continue语句:
for (/* condition */) {
try {
// things
} catch (Exception $e) {
continue;
}
// won't reach here if exception was caught
}
示例(在WriteCodeOnline上试试这个):
$counter = 0;
for ($i = 0; $i < 5; $i++) {
try {
$counter++;
if ($counter != 3) {
throw new Exception("Test");
}
} catch (Exception $e) {
continue;
}
echo "This only prints when an exception is not thrown (when \$counter is 3). See: \$counter = " . $counter;
}
echo "\n";
var_dump($counter);
答案 1 :(得分:0)
您可以将必须执行的代码(无论异常)放入finally
块。检查一下
答案 2 :(得分:0)
我想查看其他表并查看是否存在
您可以使用&#39; SHOW TABLES&#39;查询以查找存在的表。在2014年7月至2014年4月至2014年12月至2014年1月和2015年1月至2015年3月与之匹配之后
$needTables = array('april-june-2014', 'july-september-2014', 'october-december-2014', 'jan-march-2015')
$existedTables = reportExistedTablesWrapper();//SHOW TABLES
$tables = array_intersect($existedTables, $needTables);
foreach ($tables as $current_table)
{
$queryStr = "SELECT * FROM `$current_table` WHERE ...";
$query = $db->prepare($queryStr);
$query->execute();
while($row = $query->fetch()) {
}
}
答案 3 :(得分:0)
试试这个:
try {
$queryStr = "SELECT * FROM `$current_table` WHERE ...";
$query = $db->prepare($queryStr);
$query->execute();
while($row = $query->fetch()) {
}
} catch(PDOException $e) {
//echo $e->getMessage();
}
finally {
echo "Finally.\n";
}
答案 4 :(得分:0)
我实际上在表中存在一些结构问题,因此我无法从中获取数据。但是这段代码工作正常。 即使存在异常,也会执行try块中的剩余代码。因此无需添加任何其他内容。