转换if else尝试catch

时间:2010-11-25 06:11:59

标签: php mysql try-catch if-statement

有人可以帮助我将使用if-else编写的以下代码转换为try / catch。另外,让我知道在这种情况下需要trycatch或if-else是apt

$results = mysql_query($query);
if(mysql_num_rows($results)!=0)
{
    while(($result = mysql_fetch_row($results))!=FALSE)
    {
        $res   ="DELETE FROM table1 WHERE id ='".$result['id']."'";
        if(mysql_query($res)==false)
        {
            echo mysql_error();
            exit;
        }
    }
    echo $res   ="DELETE FROM table2 WHERE id ='".$id."'";
    if(mysql_query($res)!==false)
    {
        header("Location:list.php?m=4");
    }
    else
    {
        echo mysql_error();
        exit;
    }
}
else
{
    echo "Error";
}

2 个答案:

答案 0 :(得分:5)

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;

}

答案 1 :(得分:1)

从它的声音来看,似乎你认为try / catch和if-else是同样的行为。事实并非如此。 Try catch用于防止异常使应用程序崩溃或正常处理异常,以及执行日志记录和提供用户反馈。 If-else(else if)用于检查应用程序的内部状态,并相应地执行不同的操作。

通常,try-catch的效率低于switch-case或else-if方法。