2009-09-22 49 views
0

我有一個簡單的sql語句,我想根據返回的行數執行不同的操作。php + mysql_num_rows問題?

$result_lists = mysql_num_rows(mysql_query("SELECT * FROM db_table")); 
    //To see the number returned 
    print_r($result_lists); 

    switch($result_lists) { 
     case($result_lists == 0): 
     //To prove which option is actually happening 
     print_r('lists==0: '.$result_lists); 
     break; 

     case($result_lists > 1): 
     //To prove which option is actually happening 
     print_r('lists>1: '.$result_lists); 
     break; 

     case($result_lists == 1): 
     //To prove which option is actually happening 
     print_r('lists==1: '.$result_lists); 
     break; 
    } 

如果發現1個或多個行,則正確的情況下使用,但是,如果返回零行,由於某種原因(> 1)的情況下被執行。

任何人都可以看到什麼可能會出錯嗎?

任何意見讚賞。

謝謝。

+1

請不要驗證答案的快速,讓人們回答。順便說一句,這個答案可能會起作用,但它仍然是一個不好的答案。 – 2009-09-22 11:43:48

回答

-4

返回零或零,則必須檢查

case($result_lists == 0 or null): 

也許

case(empty($result_lists)): 
+1

switch語句不能這樣工作。對我來說不好的答案和-1。 – 2009-09-22 11:44:18

1

你不應該使用開關這樣的。

switch($var) 
{ 
    case 1: 
     //Some stuff 
     break; 
    case 2: 
     //Some stuff 
     break; 
    default: 
     break; 
} 

這是正確的做法。使用ifs和elses來做到這一點,而且yadayda!你的bug會消失。

爲什麼?因爲case不是用來評估語句的。它只比較switch中的內容與case中的內容。

8

你濫用switch語句 - 你應該if小號取代它或改變它是這樣的:

switch ($result_lists) 
{ 
    case 0: 
     //To prove which option is actually happening 
     print_r('lists==0: '.$result_lists); 
     break; 

    case 1: 
     //To prove which option is actually happening 
     print_r('lists==1: '.$result_lists); 
     break; 

    default: 
     //To prove which option is actually happening 
     print_r('lists>1: '.$result_lists); 
     break; 
} 

你此刻在做什麼是這樣的:

case($result_lists == 0): 

// is like doing 
if ($result_lists == ($result_lists == 0)) 

// which when $result_lists = 0 is the same as 

if ($result_lists == true) 
if (0 == 1) 
// therefore false so it drops through to the next statement 

case($result_lists > 1) 
// the same as 
if ($result_lists == ($result_lists > 1)) 
// when $result_lists = 0: 
if ($result_lists == false) 
if (0 == 0) 
+0

+1比我給出的更多解釋。如果我可以爲機器人尋找代碼行:'if(0 == 0)':D,我還會再加+1 – 2009-09-22 11:47:15