【问题标题】:How to loop through PDO Statement and write data on if statements如何循环遍历 PDO 语句并在 if 语句上写入数据
【发布时间】:2015-10-03 15:14:59
【问题描述】:

对不起,这个令人费解的标题,但我真的不知道如何解释它。我有一个包含 138 个用户的数据库,但出于管理目的,用户 133-138 已从数据库中删除。出于商业目的,我不想更改其他人的“用户 ID”。我编写了一些脚本来使用 PDO 对象从 MySQL 获取销售信息。我在 foreach 循环中通过 PDO 的“count(result)”计数,当计数等于“result2”时,它将数据写入 mPDF 中的表中。

这是问题开始的地方,它可以完美运行,直到达到没有用户的计数 133。它不会打印任何东西(因为它不应该),但随后也会跳过剩余的数字。它不会完成用户 139-146 的循环。我该如何解决?

这是我的代码:

$stmt = $con->prepare("select u.user_id, u.fname, u.lname, d.saledate, d.custname, d.straddr, d.city, d.state, d.zip
from users u
inner join dplgalionsales d
on u.lname = d.agent_last_name
where saledate > DATE_SUB(NOW(), INTERVAL 1 MONTH)
order by u.user_id asc, saledate asc");
$stmt->execute();
$res = $stmt->fetchAll();
$count = 1;
foreach($res as $result) {
    $size = count($result['user_id']);
    $mydate = date('m/d/Y');
    $dateadd = date('m/d/Y', strtotime($mydate. ' + 3 days'));  
    $html_table = '<div>Week Ending: ' .$mydate. '<br>Payroll Issued: ' .$dateadd. '</div><br>';
    $html_table .= '<table border="1" cellspacing="0" cellpadding="2" width="100%"><tr><th>Date</th><th>Customer Name</th><th>Address</th></tr>';
    while($count < $size) {
        if($val == $result['user_id']) {
            $html_table .= '<tr><td>' .$result['saledate']. '</td><td>' .$result['custname']. '</td><td>' .$result['straddr']. ' ' .$result['city']. ' ' .$result['state']. ' ' .$result['zip']. '</td></tr>';
        }
        $count += 1;
    }
    $html_table .= '</table>'; //ends HTML table
    $mpdf = new mPDF();
    $mpdf->SetTitle('DPL Galion Sales');
    $mpdf->WriteHTML($html_table);
    if(is_dir('../reports/'.$count.'')) {
        $mpdf->Output('../reports/'.$count.'/DPLOH/'.date('m-d-Y').'_DPLOH_SalesID_'.$count.'.pdf','F');
    }
}
exit;

【问题讨论】:

  • 我认为您需要将使用$count$size 的逻辑与循环查询结果的逻辑分开。我不完全确定,但我认为您可以完全摆脱 $count$size,而只需使用 while/foreach 来遍历查询语句的结果。
  • 您也可以将两个查询语句合二为一吗?
  • 我删除了第二个查询,但我需要将计数与 user_id 进行比较,以便生成一个空白 PDF 并将其保存给该用户,或者如果该员工在表中出售了某些东西,则填写表中的行时间跨度。

标签: php mysql foreach while-loop


【解决方案1】:

抱歉,我一开始没有得到你的代码。

这样做

$res = $stmt->fetchAll(PDO::FETCH_GROUP);
foreach($res as $user_id => $user_data) {
    $mydate = date('m/d/Y');
    $dateadd = date('m/d/Y', strtotime($mydate. ' + 3 days'));  
    $html_table = '<div>Week Ending: ' .$mydate. '<br>Payroll Issued: ' .$dateadd. '</div><br>';
    $html_table .= '<table border="1" cellspacing="0" cellpadding="2" width="100%"><tr><th>Date</th><th>Customer Name</th><th>Address</th></tr>';
    foreach ($user_data as $result) {
        $html_table .= '<tr><td>' .$result['saledate']. '</td><td>' .$result['custname']. '</td><td>' .$result['straddr']. ' ' .$result['city']. ' ' .$result['state']. ' ' .$result['zip']. '</td></tr>';
    }
    $html_table .= '</table>'; //ends HTML table
    $mpdf = new mPDF();
    $mpdf->SetTitle('DPL Galion Sales');
    $mpdf->WriteHTML($html_table);
    if(is_dir('../reports/'.$user_id.'')) {
        $mpdf->Output('../reports/'.$user_id.'/DPLOH/'.date('m-d-Y').'_DPLOH_SalesID_'.$user_id.'.pdf','F');
    }
}

【讨论】:

  • 我删除了查询,但我认为我没有很好地解释我想要做的事情。该程序遍历用户列表,如果员工没有任何销售结果,客户希望生成一个空白 PDF,以便他们在一段时间内看到他们的结果。我能理解控制这些结果的唯一方法是通过与“user_id”(这只是我分配的数字...... 1 到 146)进行比较的计数。它为每个员工创建一个 PDF,但在 count 不等于结果时中断并停止生成 PDF。
猜你喜欢
  • 2017-07-24
  • 1970-01-01
  • 1970-01-01
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多