[英]PHP PDO fetch results
我有以下腳本可以正常運行,但我認為
a)丑陋;
b)運行腳本后,它無法滿足我的需求。
確切地說,該腳本應按以下方式工作:
1)SQL從給定表中選擇一個注冊日期在上個月之內的所有業務代表,並按業務代表編號分組,其中計數大於1的業務代表按注冊日期升序排列。 簡而言之,返回上個月注冊了多個成員的座席列表。
2)返回結果后,會將整個列表通過電子郵件發送給我自己(不確定如何完成此操作),並更新座席獎金表(注冊一個以上成員的座席將獲得獎金)。
為了實現這一點,我的腳本當前正在運行foreach循環(我討厭)以打破必要的字段數據。
任何改進過程的建議都值得贊賞。
<?php
try {
$db = new PDO('mysql:host=localhost;dbname=dbname', 'username', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
$sql = $db->query("SELECT AGENT FROM tablename WHERE enroll_date > DATE_SUB(CURDATE(),INTERVAL 1 MONTH) GROUP BY AGENT HAVING COUNT(AGENT) >= 0 ORDER BY enroll_date ASC");
$result = $sql->fetchALL(PDO::FETCH_ASSOC);
foreach($result as $key=>$val) {
foreach($val as $ball=>$agentid) {
$sql2 = "UPDATE agent_prizes SET prize=?, method=? WHERE AGENT = '$agentid'";
$stmt = $db->prepare($sql2);
$stmt->execute(array("Y", "COMP"));
require('../phpmailer/class.phpmailer.php');
$mail = new PHPMailer();
$mail->Username = "user@domain.com";
$mail->Password = "";
$mail->SetFrom("user@domain.com");
$mail->Subject = "Subject";
$mail->MsgHTML("Message");
//I NEED TO RUN YET ANOTHER QUERY SELECT ABOVE TO CAPTURE THE AGENT EMAIL ADDRESS, LETTING THEM KNOW THEY HAVE WON A PRIZE
$mail->AddAddress($row["EmailAddress"]);
$mail->Send();
$mail->ClearAttachments();
$mail->ClearAllRecipients();
$mail->ClearReplyTos();
}
}
$db->commit();
$db->null;
}
catch (PDOException $e)
{
$db->rollback();
echo $e->getMessage();
exit;
}
?>
這擺脫了第二個foreach並且(希望-我還沒有測試過)在一個選擇中獲得了代理的電子郵件地址:
...
$sql = $db->query("SELECT tablename.AGENT AGENT, agent.EMAIL EMAIL,
FROM tablename, agent
WHERE enroll_date > DATE_SUB(CURDATE(),INTERVAL 1 MONTH) AND tablename.AGENT = agent.AGENT
GROUP BY tablename.AGENT
HAVING COUNT(tablename.AGENT) > 1
ORDER BY enroll_date ASC");
$result = $sql->fetchALL(PDO::FETCH_ASSOC);
foreach($result as $row)
{
$sql2 = "UPDATE agent_prizes
SET prize=?, method=?
WHERE AGENT = '{$row["AGENT"]}'";
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.