2010-11-25 32 views
1

Quelqu'un peut-il m'aider à convertir le code suivant écrit en utilisant if-else pour essayer/attraper. je voudrais aussi savoir est TryCatch nécessaire dans ce cas, ou si-else est aptConvertir si autre chose pour essayer d'attraper

$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

Avez-vous tenté encore? Quelle partie ne comprenez-vous pas? Et oui, la gestion des erreurs est une utilisation appropriée des exceptions. – Matthew

Répondre

1

du son de celui-ci, il vous semble que try/catch et if-else comme le même comportement. Ce n'est pas le cas. Try catch est utilisé pour empêcher une exception de provoquer un plantage de l'application ou pour gérer les exceptions avec élégance, et pour effectuer une journalisation et donner des commentaires aux utilisateurs. If-else (else if) est utilisé pour vérifier l'état interne de votre application et effectuer différentes actions en conséquence.

Généralement, un essai-catch est moins efficace que s'il y a une approche de casse-commutateur ou autrement-si au problème.

5

try...catch n'a de sens que si vos fonctions lançaient des exceptions. Si ce n'est pas le cas, il n'y a rien à catch. Je commencerai par cela comme un refactoring:

$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; 

Cela peut encore améliorer beaucoup, mais il est déjà une amélioration par rapport à votre logique de spaghetti. Si vous êtes sérieusement intéressé par l'utilisation correcte des exceptions, vous devez d'abord utiliser correctement les fonctions pour les tâches répétitives (comme les error, exit parties), puis éventuellement restructurer le tout en classes et objets, et enfin utiliser des exceptions pour communiquer entre maintenant couches imbriquées. Peut-être commencer à utiliser un framework PHP pour avoir une idée de tout ça.

Mettre des exceptions dans le code ci-dessus ne serait guère plus qu'un goto, mais seulement pour des fins d'illustration:

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

Merci deceze pouvez-vous expliquer la partie catch essayer { ....... } catch (Exception $ e) { echo 'ERREUR:'. $ e-> getMessage(); sortie; } – aWebDeveloper

+0

@Web Vous devriez lire des tutoriels sur les exceptions, mais en un mot: Si une exception est lancée dans le bloc 'try', tout code suivant dans le bloc sera ignoré et le bloc' catch' sera exécuté. L'exception levée sera transmise au bloc 'catch' sous la forme' $ e'. '$ e' est un objet avec la méthode' getMessage', qui retourne le message qui lui a été transmis lors de sa création. C'est à dire. le message sera "Aucun résultat!" pour l'exception 'throw new Exception ('No results!')'. – deceze