如何在tcpdf的一个输出中合并多个语句

时间:2019-09-25 09:00:55

标签: php mysql tcpdf

我正在尝试tcpdf库,并且有两个单独的语句,每个语句都为我提供了某些信息。当我删除一个语句时,得到的PDF输出没有错误,现在,当我包含另一个语句时。我得到以下信息:

Call to a member function rowcount() on boolean in ...DIR... pointing to the second "  if($query->rowcount() > 0) {"

有没有一种方法可以写这个?理想情况下,输出应该无缝地放在一张桌子上。另请注意,两个语句一旦单独执行,都不会出错。

N.B我以下面的示例为例,并不是真的不能将雇员表和收入表连接在一起。这个想法将对我如何在一个文件中使用两个不同的语句有所帮助。

        require_once("header.php");

        $tbl_header = '<table cellspacing="0" cellpadding="1" width="100%" border="1">';
        $tbl_footer = '</table>';
        $tbl ='';

        //statement one
        $result = $odb -> query('select * from employee');
        if($result->rowcount() > 0) {
            foreach ($result as $row) {
                            $EmployeeID = $row['EmployeeID']; 
                            $EmployeeName = $row['EmployeeName']; 


         $tbl = '<tr>
          <td width="50%" align="right">Emp ID:<br/> '.$EmployeeID.' </td>
          <td  width="50%" align="right">Emp Name:<br/> '.$EmployeeName.' </td> 
          </tr>';
            }   
            }

        //statement two 
        $query = $odb -> query('select * from income');
              if($query->rowcount() > 0) {
                    foreach ($query as $rowb) {
                        $Code  = $rowb['Code'];
                        $IncomeName  = $rowb['IncomeName'];
                        $IncomeAmount  = $rowb['IncomeAmount'];


                      $tblb .= '<tr>
          <td width="20%" align="right">'.$Code.' </td>
          <td  width="40%" align="left">'.$IncomeName.' </td> 
          <td width="40%" align="right">'.$IncomeAmount.' </td>
          </tr>';
                    }
              }


        $pdf->writeHTML($tbl_header. $tbl .$tblb . $tbl_footer, true, false, false, false, '');


        $pdf->Output(__DIR__ .'/paid_'.date('m-d-Y_hia').'.pdf', 'FI');

2 个答案:

答案 0 :(得分:1)

这种消息

Call to a member function rowcount() on boolean 

通常意味着您的查询无效-而不是返回可以调用rowcount或fetch或诸如此类的结果对象,而是返回false。因此,您需要查看查询失败的原因,并且最好在代码中进行处理。

由于您的代码未使用实时查询,因此无法说出为什么可能会失败。奇怪的是,您说它们在单独执行时都可以正常工作-您是否可以在任何情况下(即在您仅回显结果的标准页面中)一个接一个地执行它们?或者,如果您添加了try..catch并启用了PDO异常模式,这是否可以提供任何提示它可能失败的线索?

答案 1 :(得分:0)

我想出了问题所在。它使用了相同的连接变量,即$ odb,这引起了冲突。我创建了另一个连接,并给它一个不同的变量名,即$ db。这意味着我有两个不同的连接文件。请注意,我有header.php和headerb.php

        require_once("header.php");

        $tbl_header = '<table cellspacing="0" cellpadding="1" width="100%" border="1">';
        $tbl_footer = '</table>';
        $tbl ='';

        //statement one
        $result = $odb -> query('select * from employee');
        if($result->rowcount() > 0) {
            foreach ($result as $row) {
                            $EmployeeID = $row['EmployeeID']; 
                            $EmployeeName = $row['EmployeeName']; 


         $tbl = '<tr>
          <td width="50%" align="right">Emp ID:<br/> '.$EmployeeID.' </td>
          <td  width="50%" align="right">Emp Name:<br/> '.$EmployeeName.' </td> 
          </tr>';
            }   
            }

        //statement two 
        require_once("headerb.php");
        $query = $db -> query('select * from income');
              if($query->rowcount() > 0) {
                    foreach ($query as $rowb) {
                        $Code  = $rowb['Code'];
                        $IncomeName  = $rowb['IncomeName'];
                        $IncomeAmount  = $rowb['IncomeAmount'];


                      $tblb .= '<tr>
          <td width="20%" align="right">'.$Code.' </td>
          <td  width="40%" align="left">'.$IncomeName.' </td> 
          <td width="40%" align="right">'.$IncomeAmount.' </td>
          </tr>';
                    }
              }


        $pdf->writeHTML($tbl_header. $tbl .$tblb . $tbl_footer, true, false, false, false, '');


        $pdf->Output(__DIR__ .'/paid_'.date('m-d-Y_hia').'.pdf', 'FI');