0

最初のコード:

while($thisValue = mysql_fetch_assoc($someUnrelevantPreviousQuery)) {
    if($thisValue['thisOne']=='something') {
         $query = mysql_query("Some query");
         $result = mysql_num_rows($query);
         if($result) {
             while($result2 = mysql_fetch_assoc($query)) {
                 /* Do this */
             }
         }else echo "Error 1";
     }else
     if($thisValue['thisOne']=='something else') {
         $query = mysql_query("Some other query");
         $result = mysql_num_rows($query);
         if($result) {
             while($result2 = mysql_fetch_assoc($query)) {
                 /* Do that */
             } 
         }else echo "Error 2";
      }             
}

したがって、このコードには 1 つの問題と 1 つの質問があります。

問題:

最初の while が 2 つの値を返す場合、$thisValue['thisOne']=='something' AND $thisValue['thisOne']=='something else'2 つのクエリを実行する必要があります。最初の「if」に 1 つ、次に 2 番目に 1 つ。ただし、実際には、検索は機能します$thisValue['thisOne']=='something'が、ループは停止し、他の値に対しては何もしません。どうして?

編集: また、最初の while のみが返さ$thisValue['thisOne']=='something else'れる場合、代わりに次の if ステートメントに進む必要があるときに、「エラー 1」エコーが返されます。

質問:

これはこれを行う正しい方法ですか?つまり、別のループまたはメソッドを使用する必要がありますか?

PS:コードは私にはかなり自明のように思えます。そのため、説明しませんでした。

4

2 に答える 2

0

あなたのifステートメントを見る:

if($thisValue['thisOne']=='something') {}
else if($thisValue['thisOne']=='something else') {}

「something」==「something else」の場合にのみ両方のブロックを実行します

「==」を使用しているため、これらの値が互いに等しい可能性があります...しかし、ほとんどのシナリオでは、それはほとんどありません.

于 2012-10-01T16:02:59.343 に答える
0

わかりました、私のコメントが単なる答えかもしれないので、ここに投稿します:

'Something' 同じ変数 (したがって同じ値) をチェックしており、それが と の両方に 等しいことを期待しています'Something else'。あの凧は二度と飛ばない...

=> から次の場合は、おそらく秒を変更します。

else
if ($thisValue['thisOne'] == 'Something else')
{}
//TO:
if ($thisValue['thisOne'] === 'Something else' || $thisValue['thisOne'] === 'Something')
{
    //do second query
}

そうすれば、最初の if が true の場合に 2 番目のクエリが実行されますが、false の場合も実行され、$thisValue['thisOne'] === 'Something else'. また、緩く型付けされた言語では、===可能な限り (型と値のチェック) を使用してください。身につけるのは良い習慣です。

于 2012-10-01T16:07:59.223 に答える