2009-09-22 42 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