PHP:即使发现异常,如何执行try块?

时间:2014-12-16 07:28:54

标签: php mysql pdo

我有一个尝试块,其中一些例外将肯定抛出但如果发生这种情况,我不想停止执行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-2014july-september-2014october-december-2014jan-march-2015。这些表名存储在一个数组中。

现在它将查询第一个表并且是否找到它,那么它很好但是如果找不到,那么我想检查其他表并查看它们是否存在。如果找不到任何表,它将抛出异常,然后它不会检查其他表。

有办法吗?

5 个答案:

答案 0 :(得分:1)

使用continue语句:

for (/* condition */) {
  try {
    // things
  } catch (Exception $e) {
    continue;
  }

  // won't reach here if exception was caught
}

请参阅:http://php.net/continue

示例(在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块。检查一下

http://php.net/manual/en/language.exceptions.php

答案 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块中的剩余代码。因此无需添加任何其他内容。