2010-11-25 3 views
1

누군가가 try/catch를 사용하여 작성된 다음 코드를 변환하는 데 도움을 줄 수 있습니까? 또한 나를 trycatch이 경우 필요 알려 또는 경우 - 다른 것은 그것의 소리에서다른 사람이 캐치를 시도하면 변환

$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"; 
} 
+0

http://www.w3schools.com/php/php_exception.asp – ArK

+0

당신 유무 : 위의 코드에 예외를 두는

는 설명을 목적으로에 대한 goto보다 거의 더있을 것이나, 아직 시도한거야? 어떤 부분을 이해하지 못하니? 그리고 네, 오류 처리는 예외의 적절한 사용법입니다. – Matthew

답변

1

쉽다, 그것은 당신이 생각하는 것 같습니다 시도/캐치와 같은 동작 같은 경우 - 다른 사람은. 그건 사실이 아니야. try catch는 예외로 인해 응용 프로그램이 다운되지 않도록하거나 예외를 정상적으로 처리하고 로깅을 수행하고 사용자 의견을 제공하는 데 사용됩니다. If-else (else if)를 사용하여 응용 프로그램의 내부 상태를 확인하고 이에 따라 다른 작업을 수행합니다.

일반적으로 try-catch는 switch-case 또는 else-if 문제에 비해 효율이 떨어집니다.

5

try...catch 함수가 예외를 throw하는 경우에만 의미가 있습니다. 그렇지 않으면 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 프레임 워크를 사용하여 모든 것을 느낄 수 있습니다.

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; 

} 
+0

덕분에 deceze 유 캐치 부품 시도 { ....... } 캐치 (예외 $ 전자) { 에코 '오류 :'설명 할 수있다. $ e-> getMessage(); exit; } – aWebDeveloper

+0

@Web 예외에 대한 자습서를 읽어야합니다. 간단히 말해서 : try 블록 안에 예외가 발생하면 블록의 다음 코드는 건너 뛰고'catch' 블록이 실행됩니다. throw 된 예외는'catch'블록에'$ e'로 전달됩니다. '$ e'는'getMessage' 메소드를 가진 객체로, 생성 될 때 전달 된 메시지를 반환합니다. 나는. 메시지는 "결과 없음"입니다. '예외가 발생했습니다 ('결과 없음') 예외가 발생했습니다. – deceze