2013-09-26 66 views
0

我有下面的代码来从数据库中检索行,但是如果我在'assign_id_input'中输入数据库中不存在的id,它将不会执行else语句并显示'Error ”。else else语句问题

$assign_id_input = $_POST['assign_id_input']; 

$search_assign_user_id = mysql_query("SELECT * FROM free_ebook WHERE useid = $assign_id_input;")or die(mysql_error()); 

while($assign_user_id_array = mysql_fetch_array($search_assign_user_id, MYSQL_ASSOC)) { 
    $filtered_assign_user_id_array = array_filter($assign_user_id_array); 

    if(count($filtered_assign_user_id_array) > 0) { 
     echo 'No Error'; 
    } 
    else{ 
     echo 'Error'; 
    } 
} 
+2

请缩进代码。 –

+1

使用var_dump()来检查你的查询返回到数组中,并启发你将会! – Borniet

+0

惊讶的没有人提出了关于注入和库的观点,所以:请不要尝试和修复安全性,所以从开始就不要将'POST'变量直接放入查询中。它是不可信的数据,可能包含各种东西(比如SQL命令)。此外,你使用一个废弃的库(mysql *)。查看关于这些功能的所有手册页上的BIG红色错误(您检查过手册页,是吗?) – Nanne

回答

0

您的代码是没有锯齿,稍undreadable,但在我看来,问题是,你在while循环分配。我想你应该使用这个。

while($assign_user_id_array == mysql_fetch_array($search_assign_user_id, MYSQL_ASSOC)) { 
+0

这不是问题。这是一种获取表格行的方法。如果mysql_fetch_array回退FALSE,while循环将被关闭。 – beniamin

0

你的错误是没有显示,因为您的代码将不会进入while循环,因为 $search_assign_user_id中有0行,所以mysql_fetch_array()将返回FALSE

如果您的查询返回任何行,您应该检查mysql_num_rows(),之后您可以输入while循环。

$assign_id_input = $_POST['assign_id_input']; 

$search_assign_user_id = mysql_query("SELECT * FROM free_ebook WHERE userid = $assign_id_input;")or die(mysql_error()); 

if (mysql_num_rows($search_assign_user_id) > 0) { 

    while($assign_user_id_array = mysql_fetch_array($search_assign_user_id, MYSQL_ASSOC)) { 
     $filtered_assign_user_id_array = array_filter($assign_user_id_array); 
     echo 'No Error'; 
    } 
} else { 
    echo 'Error'; 
} 
+1

哦,我明白了。多谢兄弟。 –

0

使用mysql_affected_rows() while循环之前

+0

请阅读php手册。 mysql_affected_rows()被弃用,它只能在INSERT,UPDATE,REPLACE或DELETE上不在SELECT上。 http://php.net/manual/en/function.mysql-affected-rows.php – Chris

+0

它以下面的方式为我工作$ sql =“Select * From abc”; $ result = mysql_query($ sql)或(“!sql”); 如果(mysql_affected_rows()) { echo“hi”; } else { echo“bye”; } – rohitr

+0

它可能有些工作,但它返回的价值肯定不是你真正想要的价值。并且为了将来的使用,这个函数被解压缩并将被删除。 – Chris