php
  • mysql
  • 2011-08-24 115 views 2 likes 
    2

    有一个问题,如果行等于0,则不调用else语句。如果我在网站上输入正确的详细信息,则满足第一个条件并显示xml,但是如果输入了不正确的详细信息,则不会显示错误xml。PHP Mysql如果语句不起作用

    echo "<users>"; 
    $result = mysql_query("SELECT * FROM `numbers` WHERE `email` = '".$email."' AND `password` = '".$password."'") or die('Invalid query: ' . mysql_error()); 
    
    if (!$result) die('Invalid query: ' . mysql_error()); 
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
    { 
        if(mysql_num_rows($result) != 0) 
        { 
         echo "<usercallback>"; 
         echo "<id>".$row['id']."</id>"; 
         //echo "<number>".$row2['number']."</number>"; 
         //echo "<gender>".$row2['gender']."</gender>"; 
         //echo "<relationship>".$row2['relationship']."</relationship>"; 
         echo "</usercallback>"; 
        } 
        else 
        { 
         echo "<usercallback>"; 
         echo "<id>error</id>"; 
         echo "</usercallback>"; 
        } 
    } 
    
    echo "</users>"; 
    
    +0

    不要使用'die',这个xml已经死了! – ajreal

    +0

    避免使用'mysql'函数,而是使用'mysqli',它在所有方面都更好,'mysql'正在被弃用的道路上 –

    回答

    6

    其实你必须把是否mysql_num_rows检查,而块外

    echo "<users>"; 
    $result = mysql_query("SELECT * FROM `numbers` WHERE `email` = '".$email."' AND `password` = '".$password."'") or die('Invalid query: ' . mysql_error()); 
    
    
    if(mysql_num_rows($result) != 0) 
        { 
        while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
         {  
         echo "<usercallback>"; 
         echo "<id>".$row['id']."</id>"; 
         //echo "<number>".$row2['number']."</number>"; 
         //echo "<gender>".$row2['gender']."</gender>"; 
         //echo "<relationship>".$row2['relationship']."</relationship>"; 
         echo "</usercallback>"; 
         } 
        } 
        else 
        { 
         echo "<usercallback>"; 
         echo "<id>error</id>"; 
         echo "</usercallback>"; 
        } 
    
    echo "</users>"; 
    
    +0

    'mysql_num_rows'后面跟着'while'循环是反模式。用'$ row = mysql_fetch_array($ result,MYSQL_ASSOC)替换它; if(!$ row){/ * handle no results * /} else {do {/ * handle rows * /} while($ row = mysql_fetch_array($ result,MYSQL_ASSOC));}' – cwallenpoole

    +0

    我不知道这件事。 。我检查了我的结果,发现工作..请建议我一个文件,以便我可以了解更多..如果你可以编辑我的答案,这将是有益的。 – mithunsatheesh

    +0

    @cwallenpoole:在我的书中,do..while循环是反模式,因为它们通常意味着代码重复,例如在您的示例中调用'mysql_fetch_array()'。 –

    0

    while ($row = mysql_fetch_array($result, MYSQL_ASSOC))

    如果没有行,然后$rowfalse,它永远不会进入的上方,而循环。 所以你不能得到错误信息

    0

    你在执行循环时检查行,你应该检查while循环的行数。

    0

    它看起来像你期待MySQL的零行响应导致undef $结果。这不是发生了什么。如果出现错误,mysql_query()返回null。您可以测试其返回值的“真值”以查看查询是否正确运行。如果查询结果为0行响应,则它正确运行。那么测试的值是mysql_num_rows($result)

    但是,它可以做得更简单。我平时写,如:

    $res = mysql_query("SELECT 1"); 
    if (!$res) { 
        //do whatever error reporting if the SQL was bad 
        //though you should probably deal with any condition that ends up 
        //here before you go into production! 
    } 
    if (mysql_num_rows($res) == 0) { 
        //put out my "no results found" message 
    } 
    while ($row = mysql_fetch_assoc($res)) { 
        //do my per-row business 
    } 
    

    mysql_fetch_assoc()返回false当没有(或没有更多)的成绩来回报。所以如果它是空的,while循环将永远不会运行,所以它不需要在else之内。

    相关问题