我有一个简单的sql语句,我想根据返回的行数执行不同的操作。
$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)大小写。
任何人都可以看到可能出现的问题吗?
任何建议表示赞赏。
感谢。
答案 0 :(得分: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)
答案 1 :(得分:1)
你不应该使用这样的开关。
switch($var)
{
case 1:
//Some stuff
break;
case 2:
//Some stuff
break;
default:
break;
}
这是正确的方法。使用ifs和elses来做,yadayda!你的错误会消失。
为什么?因为case
不用于评估语句。它只会将switch
中的内容与case
中的内容进行比较。
答案 2 :(得分:-4)
返回零或null,你有检查
case($result_lists == 0 or null):
或者
case(empty($result_lists)):