2016-05-17 74 views
1

我想根据查询是否为null来判断条件,并打印两个不同的表。以下是我的代码。检查一个MYSQL查询是否为空

$number_of_date= "SELECT SUM(number_of_date) AS number_of_date 
        FROM emp_leaves 
        WHERE emp_id='$userID' 
         AND leave_category='Annual' 
         AND apply_year='$year'"; 
$number_date = mysql_query ($number_of_date); 

if (($number_date == 'NULL')) 
{ 

    $result2 = "SELECT * FROM leave_info 
        WHERE employment_type='permanent' 
        AND leave_type='annual'"; 
    $sql2 = mysql_query ($result2); 

    while($row = mysql_fetch_array($sql2)) { 
     ?> 
    <tr> 
     <td><?php echo $row["leave_type"]?></td> 
     <td><?php echo $row["leave_count"]?></td> 
     </td></tr><?php } 
} 
else 
{ 
    $sql = "SELECT * FROM emp_leaves 
       WHERE emp_id='$userID' 
       AND leave_category='Annual' 
       ORDER BY leave_id DESC limit 1"; 
    $result = mysql_query ($sql); 

    while($row = mysql_fetch_array($result)) { 
    ?> 
    <tr> 
     <td><?php echo $row["leave_category"]?></td> 
     <?php }?><?php 
    while($row11 = mysql_fetch_array($number_date)) { 
      ?> 
      <td><?php echo $row11["number_of_date"]?></td><?php } } ?> 
    </tr> 

但是,“如果”条件不起作用。做出这种状况的正确方法是什么?任何人都请帮助我!

+0

我已更新ans请检查 –

回答

1

尝试,

$number_of_date= "SELECT SUM(number_of_date) AS number_of_date 
         FROM emp_leaves 
         WHERE emp_id='$userID' AND 
          leave_category='Annual' AND 
          apply_year='$year'"; 

    $res_qry  = mysql_query($number_of_date) 
        or 
        die ('Invalid query :: <br/>'.$number_of_date. 
             ' <br/>'.mysql_error()); 

    $rowqry  = mysql_fetch_assoc($res_qry); 
    $number_date = $rowqry ['number_of_date']; 

现在使用,$ number_date

if (($number_date == '') || empty($number_date)) 

如果查询返回NULL,通常PHP认为它作为一个空..

你也可以尝试is_null( )

请注意,mysql函数已被弃用,不推荐使用。 改为使用MySQLi或PDO。有以下查询的参考。

http://php.net/manual/en/book.mysqli.php

http://php.net/manual/en/book.pdo.php

+0

尝试在答案中调试查询并发布结果。在< echo >这两种情况下保持调试点并尝试调试它。 – Hytool

+0

谢谢你,现在从这种方式很好, – Chathurika

2

可以使用isset()empty() PHP函数。

if(isset($number_date))if(empty($number_date))

编辑

看看HERE

对于SELECT,SHOW,描述,解释等语句返回的结果集,请求mysql_query()成功返回的资源或错误时为FALSE。

对于其他类型的SQL语句,INSERT,UPDATE,DELETE,DROP等,mysql_query()在成功时返回TRUE或在错误时返回FALSE。

所以请试试这个。

if (mysql_query ($number_of_date))或者在你的代码中编辑这样。

if (($number_date == true))

+0

我也试过这种方式,但没有工作 – Chathurika

+0

你得到的任何错误? – Archish

+0

没有任何错误,但条件无法正常工作 – Chathurika

2

请检查是否查询执行或结果没有一排

if (!$number_date or count($number_date) < 1){ 
     if(mysql_error()){ 
      die('Invalid query: ' . mysql_error()); 
     } 
    } 

mysql_query($sql)执行查询并返回结果,我们需要检查,查询被执行或不使用,如果条件if($number_date)意味着查询执行,if(!$number_date)表示查询未执行

+0

好,但只有在条件总是不执行时,才执行else语句, – Chathurika

+0

只有在执行查询时执行else语句并且结果超过1行如果您只想检查执行的查询还是不执行查询,则count = $ number_date)<1' –

+0

@Chathurika你可以解释我的意思是“查询为空”意味着返回结果没有值? –

1

我假定您指的是该行

if (($number_date == 'NULL')) 

这是行不通的,因为你的变量$number_date相较于'NULL',不给NULL。为了测试mysql_query ($number_of_date)回报NULL是否,你需要使用的功能is_null(),作为

if (is_null($number_date)) 

说了这么多,还让我说DO NOT USE THEmysql_*API!此API已被弃用了一些很好的理由;请迁移您的代码以使用mysqliPDO。这两种API都提供了准备好的语句,这些语句(除其他外)提供了针对SQL injection attacks的保护措施。

1

从的mysql_query()manual

对于SELECT,SHOW,描述,解释等语句返回的结果集,请求mysql_query()成功返回的资源,或者在错误FALSE。

因此您的支票== 'NULL'是错误的。如果查询成功,函数将返回句柄,否则返回FALSE。您可以检查!== false是否被发现。任何其他答案在这里与isset(),empty()if (!$number_date)也是正确的。

此外,请注意PHP中的mysql扩展是已弃用。最好使用其他扩展名,如mysqli or PDO