1

私が直面している問題は、mysql_num_rows の出力がコード全体で 1 になることですが、if ステートメントで wil 0 と一致すると true が返され、コードが実行されます。そのため、 $license は実際の値の代わりに.......を返します。

これらを使用して自分で問題をデバッグしようとしました。

  • print_r を試して、データが存在するかどうかを確認しました。- はい。
  • 最初の部分で $license をエコーし​​ようとしました - 正しい値を返します。
  • mysql_num_rows の値を確認しようとしました - 1 を返します。
  • if ステートメントで 0 と一致させる - 値が 1 であるため false であるべき場合に true を返します。

これについて何か助けはありますか?

$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";
4

3 に答える 3

3

確かにあなたはこれを意味します:

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ステートメントの下の最初の行のみが含まれることを意味します。So$licenseは常に に設定され...........ます。

常に中括弧を使用してください。

于 2012-03-25T07:33:57.557 に答える
1

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
于 2012-03-25T07:26:54.237 に答える
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)) {
        $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";
}
于 2012-03-25T07:36:03.917 に答える