我有以下查询来检索延迟归还的书籍。效果很好:我得到了用户和签名会员借的每本书。
$stmt = $pdo->prepare(" SELECT .....
FROM $t_books
LEFT JOIN $t_resas ON $t_books.id_book=$t_resas.id_book
LEFT JOIN $t_users ON $t_users.id_user=$t_resas.id_user
LEFT JOIN $t_members ON $t_members.pseudo=$t_resas.name
WHERE $t_resas.resa_back='N' AND $t_resas.date_end < CURRENT_DATE
ORDER BY $t_members.pseudo ASC, $t_resas.date_end DESC ");
我还有2个功能,一个是拆分数据,显示结果:
function display_break_users($nameM) {
echo "++++++++++ BREAK ++++++++++";
}
和一封电子邮件给会员,作为迟归书籍的提醒:
function email_to_member($allWarningsOnBooks) {
/* HERE : many lines to set up of email */
$send_mail = mail($email_m, $subject, $message_body, $headers);
}
现在,我运行查询:
$stmt->execute();
$results = $stmt->fetchAll();
foreach ($results as $row) {
$name_resa = $row['name_resa'];
if ($nameM != $name_resa) {
display_break_users($name_resa); /* split the data and add a line break for new user */
$nameM = $name_resa;
email_to_member($allWarningsOnBooks); /* email each member its related data */
}
/* HERE : get the results and print them = OK */
echo "[ my results here ]";
$allWarningsOnBooks .= "[ my results here ]";
/* HERE IS MY PROBLEM */
/* I can't free the results and reset the pointer to the next user */
/* only the first member gets the proper data, the following get it aggregated */
} // end foreach loop
$stmt->closeCursor();
我可以拆分数据并打印它,使其看起来像这样:
1. USER A
1. book 1 (to user John A.)
2. book 15 (to user Alice B.)
3. book 19 (to user Bob C.)
...
2. USER B
1. book 2 (to user Sally D.)
2. book 11 (to user Betty E.)
3. book 13 (to user Dave F.)
...
现在,我的问题是:我无法获取每个数据块并将其通过电子邮件发送给其成员。
用户 A 应该收到一封包含所有数据的电子邮件:“1. book 1(给用户 John A.) - 2. book 15(给用户 Alice B.) - 3. book 19(给用户 Bob C. )", user B with "1. book 2 (to user Sally D.) - 2. book 11 (to user Betty E.) - 3. book 13 (to user Dave F.)" 等等在。但是第一个成员拥有用户#1 的正确数据,但是第二个成员拥有来自成员#1 和成员#2 的数据。
问:在我循环的某个时刻,我在哪里以及如何收集一个用户的数据以通过邮件发送?如何停止/重置结果以在下一个指针处获取数据?