try...catch
имеет смысл только в том случае, если ваши функции генерируют исключения.Если они этого не сделают, то нет ничего для catch
.Я бы начал с этого как рефакторинг:
$results = mysql_query($query);
if (!mysql_num_rows($results)) {
echo 'No results!';
exit;
}
$ids = array();
while (($result = mysql_fetch_row($results)) !== false) {
$ids[] = $result['id'];
}
$ids = array_map('mysql_real_escape_string', $ids);
$query = "DELETE FROM table1 WHERE id IN ('" . join("','", $ids) . "')";
if (!mysql_query($query)) {
echo mysql_error();
exit;
}
$query = "DELETE FROM table2 WHERE id = '$id'";
if (!mysql_query($query)) {
echo mysql_error();
exit;
}
header("Location: list.php?m=4");
exit;
Это все еще можно улучшить, но это уже улучшение по сравнению с вашей логикой спагетти.Если вы серьезно заинтересованы в правильном использовании исключений, вы должны сначала перейти к правильному использованию функций для повторяющихся задач (таких как части error, exit
), а затем, возможно, реструктурировать все это в классы и объекты и, наконец, использовать исключения для связи междутеперь вложенные слои.Возможно, начните использовать PHP-фреймворк, чтобы почувствовать все это.
Помещение исключений в приведенный выше код вряд ли будет больше, чем goto
, но только для иллюстративных целей :
try {
$results = mysql_query($query);
if (!mysql_num_rows($results)) {
throw new Exception('No results!');
}
$ids = array();
while (($result = mysql_fetch_row($results)) !== false) {
$ids[] = $result['id'];
}
$ids = array_map('mysql_real_escape_string', $ids);
$query = "DELETE FROM table1 WHERE id IN ('" . join("','", $ids) . "')";
if (!mysql_query($query)) {
throw new Exception(mysql_error());
}
$query = "DELETE FROM table2 WHERE id = '$id'";
if (!mysql_query($query)) {
throw new Exception(mysql_error());
}
header("Location: list.php?m=4");
exit;
} catch (Exception $e) {
echo 'ERROR: ' . $e->getMessage();
exit;
}