mysql_num_rows в операторе if - PullRequest
       11

mysql_num_rows в операторе if

1 голос
/ 25 марта 2012

Проблема, с которой я сталкиваюсь, состоит в том, что mysql_num_rows дает мне вывод 1 во всем коде, но когда я сопоставляю его с 0 в операторе if, он возвращает true и выполняет код.поэтому $ license возвращает ........ вместо ее фактического значения.

Я попытался отладить проблему самостоятельно, используя эти.

  • Попытался print_r, чтобы увидеть, существуют ли данные,- Да.
  • Попытка повторить $ license в первой части - возвращает правильное значение.
  • Попытка проверки значения mysql_num_rows - возвращает 1.
  • Сопоставление с 0 в операторе if- возвращает true, когда должно быть false, поскольку значение равно 1.

Любая помощь по этому поводу?

$check = mysql_query("SELECT * FROM licenses WHERE email='$email'") or die(mysql_error
                                                                           ());
if (mysql_num_rows($check) > 0)
{
    while ($data = mysql_fetch_array($check))
    {
        print_r($data); // for test
        $name = $data['name'];
        $license = $data['pid'];
        echo $license; // test print 1
        $comments = $data['comments'];
    }

    if ($license == "Sgsmorgan")
        $license = "EWP Discounted Basic (Simpleleveraging)";
}

$count = mysql_num_rows($check); // for test
echo $count; // returns 1.
if (mysql_num_rows($check) == 0)
    $name = "";
$license = "...........";
echo $license;// test print 2
$comments = "Email doesnt exist in the database";

Ответы [ 3 ]

3 голосов
/ 25 марта 2012

Конечно, вы имеете в виду следующее:

if (mysql_num_rows($check)==0)
{
    $name = "";
    $license = "...........";
    echo $license; //Test print 2
    $comments = "Email doesnt exist in the database";
}

Вместо

if (mysql_num_rows($check)==0)
$name = "";
$license = "...........";
echo $license; //Test print 2
$comments = "Email doesnt exist in the database";

Если не использовать фигурные скобки, это означает, что в него включена только первая строка ниже оператора if.Поэтому $license всегда устанавливается на ............

Всегда используйте фигурные скобки.

1 голос
/ 25 марта 2012

Следуя коренной причине Дэвида, вот действительно простое исправление:

$check = mysql_query("SELECT * FROM licenses WHERE email='$email'") 
         or die(mysql_error());

if (mysql_num_rows($check) > 0) {
    while ($data = mysql_fetch_array($check)) {
        $name    = $data['name'];
        $license = $data['pid'];
        $comments = $data['comments'];
    }

    $license = ($license == "Blahblah") ? "This is a second level license" : $license;

} else {
    $name = "";
    $license = "...........";
    $comments = "Email doesnt exist in the database";
}
1 голос
/ 25 марта 2012

Я считаю, что проблема в том, что в этот момент больше не осталось строк, так как ваш while цикл извлек их все.

Если я не ошибаюсь, этот код:

while ($ignored = mysql_fetch_array($check)) {
    echo "Got a row! Rows left: " . mysql_num_rows($check);
}

Должен вывести что-то вроде:

Got a row! Rows left: 3
Got a row! Rows left: 2
Got a row! Rows left: 1
Got a row! Rows left: 0
...