2010-11-25 5 views
1

誰かがif-elseを使って次のコードを試してみたり、キャッチしたりするのに手伝ってもらえますか?また、私は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

はあなたを持っていますまだ試みた?どの部分が分かりませんか?はい、エラー処理は例外の適切な使用法です。 – Matthew

答えて

1

やすくなり、それはあなたが考えているようだのtry/catchと同じ行動などのif-elseを。そうではありません。 try catchは、例外がアプリケーションをクラッシュさせないようにしたり、例外を正常に処理したり、ロギングを実行したり、ユーザーのフィードバックを与えたりするために使用されます。 If-else(else if)を使用してアプリケーションの内部状態をチェックし、それに応じて異なるアクションを実行します。

は一般的に、のtry-catchは、問題へのアプローチがあり、スイッチケースがあるか、他-かの場合よりも効率が低いです。あなたの関数が例外をスローしている場合

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; 

} 
+0

ありがとうございますdecezeはキャッチ部分を説明することができます{ ....... } catch(Exception $ e){ echo 'ERROR:' $ e-> getMessage(); exit;いずれかの例外は 'try'ブロック内でスローされた場合、ブロック内の任意の次のコードはスキップされ、' catch'ブロックが実行されます:あなたは例外に関するチュートリアルを読みますが、一言で言えばなければならない@Web } – aWebDeveloper

+0

。スローされた例外は '$ e'として' catch'ブロックに渡されます。 '$ e'は' getMessage'メソッドを持つオブジェクトで、生成時に渡されたメッセージを返します。私。メッセージは「結果なし」になります。 '新しい例外をスローする( 'No results!')例外が発生しました。 – deceze

関連する問題