проблема php + mysql_num_rows? - PullRequest
       17

проблема php + mysql_num_rows?

0 голосов
/ 22 сентября 2009

У меня есть простой оператор 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) выполняется.

Кто-нибудь может увидеть, что может пойти не так?

Любой совет приветствуется.

Спасибо.

Ответы [ 3 ]

8 голосов
/ 22 сентября 2009

Вы злоупотребляете оператором switch - вы должны заменить его на if s или изменить его следующим образом:

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 голос
/ 22 сентября 2009

Вы не должны использовать переключатель таким образом.

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

Это правильный способ сделать это. Используйте ifs и elses, чтобы сделать это, и yadayda! Ваша ошибка исчезнет.

Почему? Потому что case не предназначен для оценки заявлений. Он сравнивает только то, что в switch с тем, что в case.

0 голосов
/ 22 сентября 2009

Возвращает ноль или ноль, у вас есть проверка

case($result_lists == 0 or null):

или, может быть,

 case(empty($result_lists)):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...