Php 为什么这个脚本没有';我不能产生结果

Php 为什么这个脚本没有';我不能产生结果,php,mysql,Php,Mysql,我试图搜索2013年约翰·杰克逊的悬而未决的付款报告,但没有结果 假设在我插入name=John Jackson、class=grade one和year=2013时,查询假设在设置表中检查year=2013的设置字段值,并从2013年的付款表中减去John支付的金额 我有这两张桌子“付款和设置” Note that I'w mention some of fields 付款表(用于存储付款信息) 设置表(用于存储每年实际支付的服务费) 在设置表中,我将某项服务一年的实际支付额放入表中,这样

我试图搜索2013年约翰·杰克逊的悬而未决的付款报告,但没有结果

假设在我插入
name=John Jackson
class=grade one
year=2013
时,查询假设在设置表中检查
year=2013
的设置字段值,并从2013年的付款表中减去John支付的金额

我有这两张桌子“付款和设置”

Note that I'w mention some of fields 
付款表(用于存储付款信息)

设置表(用于存储每年实际支付的服务费)

在设置表中,我将某项服务一年的实际支付额放入表中,这样当学生支付示例(学费)时,设置表中的“学费设置”字段将减去支付表中根据过账年份支付的学费金额

这里php脚本连接两个表并查询表中的信息

  <?php include("../Connections/conn.php")?>                       
    <?php
    $fname="fname";
    $date="date";
    $class="class";

    if(isset($_REQUEST['submit'])){
    $fname=$_POST['fname'];
    $date=$_POST['year'];
    $class=$_POST['class'];


     $sql2="SELECT SUM(boarding)as boarding,SUM(exam_paper)as 
     exam_paper,SUM(school_fee)as  
     school_fee,SUM(lunch)as lunch,fname,class,date,year  
     FROM payment
     WHERE YEAR(date) = '$date' AND fname like '%".$fname."%' AND class like 
    '%".$class."%' AND    
     date like '%".$date."%' UNION  
     SELECT(boarding_setting,exampaper_setting,fee_setting,lunch_setting,year,date   
      ) 
    FROM setting WHERE YEAR(date) = '$date' AND fname like '%".$fname."%' AND class 
    like  '%".$class."%' AND date like '%".$date."%'"; 

    $q=mysql_query($sql2);  

      }
    else{
   $sql="SELECT * FROM payment";
   $q=mysql_query($sql);
      }
       ?>

甚至不能100%确定这是否可行。如果我是你,我会开始考虑使用MYSQLI,因为你使用的是不推荐使用的代码



据我所知,UNION必须在两个SELECT中提取相同数量的字段,第一个查询有10个字段,第二个查询有7个字段

您的脚本是否产生任何错误

我同意Binary101010的说法,即您使用的是不推荐使用的代码,并且它容易受到SQL注入的攻击,至少在您从用户处获得的输入上是如此。

调试它:检查脚本中的每一行是否都按预期的方式运行
id boarding_setting exampaper_setting fee_setting lunch_setting  year       date
1  200000           30000             200000      180000         2013-12-18 NULL 
   300000           40000             300000      190000         2014-12-12 NULL          
  <?php include("../Connections/conn.php")?>                       
    <?php
    $fname="fname";
    $date="date";
    $class="class";

    if(isset($_REQUEST['submit'])){
    $fname=$_POST['fname'];
    $date=$_POST['year'];
    $class=$_POST['class'];


     $sql2="SELECT SUM(boarding)as boarding,SUM(exam_paper)as 
     exam_paper,SUM(school_fee)as  
     school_fee,SUM(lunch)as lunch,fname,class,date,year  
     FROM payment
     WHERE YEAR(date) = '$date' AND fname like '%".$fname."%' AND class like 
    '%".$class."%' AND    
     date like '%".$date."%' UNION  
     SELECT(boarding_setting,exampaper_setting,fee_setting,lunch_setting,year,date   
      ) 
    FROM setting WHERE YEAR(date) = '$date' AND fname like '%".$fname."%' AND class 
    like  '%".$class."%' AND date like '%".$date."%'"; 

    $q=mysql_query($sql2);  

      }
    else{
   $sql="SELECT * FROM payment";
   $q=mysql_query($sql);
      }
       ?>
<form method="post">
<table width="500" border="0">
<tr>
<td>Student name</td>
<td><input type="text" name="fname" value="<?php echo $fname;?>" /></td>

<td>Class</td>
<td><input type="text" width="10" name="class" value="<?php echo $class;?>" /></td>


<td>Year</td>
<td><input type="number" name="year" value="<?php echo $date;?>" /></td>

<td><input type="submit" name="submit" value="Search" /></td>
<?php
while(!empty($q) and $res=mysql_fetch_array($q)){   
?>
<tr>
    <td width="15%"><?php echo $res['fname'];?></td>
    <td width="8%"><?php echo $res['class'];?></td>
     <td width="10%"><?php echo $res['boarding_setting']- $res['boarding'];?></td>
     <td width="10%"><?php echo $res['exampaper_setting']- $res['exam_paper'];?></td>
     <td width="8%"><?php echo $res['fee_setting']- $res['school_fee'];?></td>
     <td width="10%"><?php echo $res['lunch_setting']- $res['lunch'];?></td>
    <td width="10%" style="border-width:medium"><?php echo $res['date'];?></td>
</tr>

<?php }?>  
<?php include("../Connections/conn.php")?>                       
<?php

$fname=$_POST['fname'];
$date=$_POST['year'];
$class=$_POST['class'];

if(isset($_POST['submit'])){



 $sql2="SELECT SUM(boarding)as boarding,SUM(exam_paper)as 
 exam_paper,SUM(school_fee)as  
 school_fee,SUM(lunch)as lunch,SUM(trans_fee) as   
 trans_fee,idnumber,fname,class,section,boarding,term,date,year FROM payment
 WHERE YEAR(date) = '$date' AND fname like '%".$fname."%' AND class like 
'%".$class."%' AND    
 date like '%".$date."%' UNION  
 SELECT(boarding_setting,exampaper_setting,fee_setting,lunch_setting,
 trans_setting,year,date   
  ) 
FROM setting WHERE YEAR(date) = '$date' AND fname like '%".$fname."%' AND class 
like  '%".$class."%' AND date like '%".$date."%'"; 

$q=mysql_query($sql2);  

  }
else{
$sql="SELECT * FROM payment";
$q=mysql_query($sql);
  }
   ?>