2014-11-06 56 views
1

我有一个简单的行数在PHP中。 当没有行被发现时,我需要$ sfideRicevute为'0',但是这个查询没有返回任何东西。MYSQL的行数是NULL,但我需要显示0

PHP:

<?php 
    $sql = "SELECT * FROM `match` WHERE show_id = $showid AND w02 = $id AND status = 'sfida'"; 

    if ($result = mysql_query ("$sql")){ 
     while ($row=mysql_fetch_array ($result)) { 

?> 
<? $sfideRicevute = mysql_num_rows($result); ?> 
<? echo $sfideRicevute; ?> 

感谢您的帮助

+1

由于您的用户参数没有[正确转义](http://bobby-tables.com/php),所以这看起来恐怖不安全。您应该**绝不**将'$ _POST'数据直接放入查询中。这造成了一个巨大的[SQL注入漏洞](http://bobby-tables.com/)。另外,'mysql_query'是一个过时的接口,不应该被使用,它将被从PHP中删除。像[PDO这样的现代化替代品并不难学](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/)。像[PHP The Right Way](http://www.phptherightway.com/)这样的指南解释了最佳实践。 – tadman 2014-11-06 21:23:54

+0

考虑到你没有测试错误,谁知道这里可能会出现什么问题。如果使用正确,PDO将引发异常,如果存在任何问题,您不会错过任何错误。 – tadman 2014-11-06 21:24:40

回答

1

您可以检查,看看有什么$ sfideRicevute的价值,如果它是零,显示为0。

echo $sfideRicevute == null ? 0 : $sfideRicevute; 
2
echo intval($sfideRicevute); 

echo (int) $sfideRicevute 

两者都将该值转换为整数0.在php'0'中,false,0,null将全部以这种方式转换为int 0。

1,真正的和其他数字将保持其价值不过,我不知道这是明确的时候了:)

请检查http://php.net/manual/en/language.types.type-juggling.php以获取更多信息。

2

从PHP文档什么mysql_num_rows回报:

行的结果集或FALSE的成功失败的次数。

它应该返回0,如果不是,则可能有错误的查询。

另外请注意,使用这些mysql_函数不推荐,因为它们将被从PHP删除,请参阅http://nl3.php.net/manual/en/faq.databases.php#faq.databases.mysql.deprecated

二:你有没有想过SQL注射,你直接把一个变量到查询对于上面链接中提到的替代方案,这也不被推荐和不必要。

+0

即使查询执行失败,我也不同意。用户反馈应该是0行或类似没有结果。例如,如果数据库处于脱机状态,mysql_num_rows也将为false。此外,提高SQL注入的道具。 – Digitalis 2014-11-06 21:28:25

+0

你究竟有什么不同意见? :) – Arie 2014-11-06 21:32:05