【问题标题】:How to combine multiple statements in one output for tcpdf如何在一个输出中为 tcpdf 组合多个语句
【发布时间】:2020-01-25 10:25:59
【问题描述】:

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

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

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

请注意,我使用下面的示例,并不是真的无法连接员工表和收入表。这个想法是帮助我如何在一个文件中使用两个不同的语句。

        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');

【问题讨论】:

    标签: php mysql tcpdf


    【解决方案1】:

    这种消息

    Call to a member function rowcount() on boolean 
    

    通常意味着您的查询没有工作 - 而不是返回一个您可以调用 rowcount 或 fetch 或其他任何方法的结果对象,而是返回 false。因此,您需要了解查询失败的原因,并在您的代码中进行处理。

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

    【讨论】:

      【解决方案2】:

      我想出了问题所在。它使用相同的连接变量,即 $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');
      

      【讨论】:

      • 那么还有其他问题,为每个查询创建一个新连接从来都不是正确的解决方案,充其量是一种解决方法。
      • 是的,这看起来确实很奇怪。了解更多关于正在使用的数据库库的信息会很有趣,也许它需要在打开第二个查询之前以某种方式关闭第一个查询。
      猜你喜欢
      • 1970-01-01
      • 2021-10-25
      • 2020-01-07
      • 2013-08-14
      • 1970-01-01
      • 2021-10-27
      • 2012-01-30
      • 1970-01-01
      • 2014-07-27
      相关资源
      最近更新 更多