我会尽力解释我需要做的事情:
我有这个远程SQL数据库,其中存储了数千个os记录和表; 我用php和sqlsrv模块成功连接到这个数据库。
我运行的查询是:
$sql = "SELECT [FOURNI], [NU_INT], [NU_IMM], [NOM_EQP], [N_SERI], [TYP_MOD], [MARQUE], [NOM_UF], [NOM_ETAB], [DA_AP], [OBSERV], [OBSERV2], [INT_CM], [LIB_STATUT] FROM [INPROGRESS_WO_VIEW]
WHERE [FOURNI] <> 'NULL'
ORDER BY [FOURNI] ASC, [NU_INT] ASC";
这就是结果:
我还设置了phpmailer,并且已经能够向选定的地址发送电子邮件;
我需要做什么:
在查询中为每个[FOURNI](第1列)发送一封电子邮件,其中包含电子邮件正文中的HTML表格,该表格会返回特定[FOURNI]的所有行(在已发布的图片中,列标题为“Fornitore”)
大多数[FOURNI]有多个关联的行,你无法预测多少行; 我能够在不同的查询中关联每个[FOURNI]的电子邮件地址,从不同的表中获取参数并使用LEFT JOIN。
我需要能够使用变量并将它们放在主题中,例如:
$sub = "TEST EMAIL TO THIS " . $fourni;
其中$ fourni是返回该单行数据的查询结果, 例如:
$sql = "SELECT [FOURNI] FROM [INPROGRESS_WO_VIEW]
WHERE [FOURNI] = 'GAMBRO'";
如果这太混乱我很抱歉,我会尽量澄清。
我在Windows 10 32bit上使用WAMP - php 5.6.19 //远程数据库是Windows Server 2008上的SQL SERVER 2008 R2
谢谢
编辑2016年8月30日:
感谢@Synchro,我在phpmailer的示例文件中尝试了maillist文件,搜索了几个小时,found something,我已经提出了这个代码,但是当我运行它时它只是加载页面undefinitely:
//connection details and query
$serverName = "**********"; //serverName\instanceName
$connectionInfo = array( "Database"=>"******", "UID"=>"*****", "PWD"=>"*****");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn ) {
echo "Connection established.<br />";
}else{
echo "Connection could not be established.<br />";
die( print_r( sqlsrv_errors(), true));
}
$sql = "SELECT [FOURNI], [NU_INT], [NU_IMM], [NOM_EQP], [N_SERI], [TYP_MOD], [MARQUE], [NOM_UF], [NOM_ETAB], [DA_AP], [OBSERV], [OBSERV2], [INT_CM], [LIB_STATUT] FROM [INPROGRESS_WO_VIEW]
WHERE [FOURNI] = <> 'NULL'
ORDER BY [NU_INT] ASC";
$sql2 = "SELECT DISTINCT FOURNI, AD_EMAIL FROM FOURNIS2
WHERE FOURNI = 'BARBAGALLO'
ORDER BY FOURNI";
$stmt = sqlsrv_query($conn, $sql);
if( $stmt === false ) {
die( print_r( sqlsrv_errors(), true));
}
$stmt2 = sqlsrv_query($conn, $sql2);
if( $stmt2 === false ) {
die( print_r( sqlsrv_errors(), true));
}
//here begins the mailing list
error_reporting(E_STRICT | E_ALL);
date_default_timezone_set('Etc/UTC');
require 'PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isHTML(true);
$mail->isSMTP();
$mail->Host = 'smtps.aruba.it';
$mail->SMTPAuth = true;
$mail->SMTPKeepAlive = true;
$mail->Port = 465;
$mail->Username = '*****';
$mail->Password = '*****';
$mail->setFrom('*****');
$mail->Subject = "PHPMailer Simple database mailing list test";
include "sql.php";
$result = sqlsrv_fetch_array($stmt2, SQLSRV_FETCH_ASSOC);
foreach ($result as $row) {
$mail->addAddress($result["AD_EMAIL"], $result["FOURNI"]);
while ($result = sqlsrv_fetch_array($stmt2, SQLSRV_FETCH_ASSOC)) {
$fornitore = $result['FOURNI'];
}
$body = "<table><tr><th>ODL</th><th>INV</th><th>APP.</th><th>SERIALE</th><th>MODELLO</th><th>MARCA</th></tr>";
while($row2 = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
$body .= "<tr><td>".$row2['NU_INT']."</td><td>".$row2['NU_IMM']."</td><td>".$row2['NOM_EQP']."</td><td>".$row2['N_SERI']."</td><td>".$row2['TYP_MOD']."</td><td>".$row2['MARQUE']."</td></tr>";
}
$mail->Body = $body.'</table>';
$mail->set('X-Priority', '3'); //Priority 1 = High, 3 = Normal, 5 = low
$mail->Send();
// Clear all addresses and attachments for next loop
$mail->clearAddresses();
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}
}
?>
从这个例子中,我有一个邮件列表$ sql2由两列组成:FOURNI,AD_MAIL 从该表中运行第一个应该将电子邮件地址替换为addAddress字段的foreach;
对于我发送的每封电子邮件,我需要从$ sql表创建一个动态生成的html表,它返回表$ sql2中与列FOURNI(两个表中的第一列)相关联的所有行。
我尝试了一百种不同的错误方法,但我无法弄清楚编写代码的正确算法。