Php 如何修改mysqli结果?(将一行添加到结果)
我正在使用phpMailer向大量用户发送新闻稿。 在一个while循环中,我得到了每个用户的电子邮件地址:Php 如何修改mysqli结果?(将一行添加到结果),php,mysql,mysqli,phpmailer,Php,Mysql,Mysqli,Phpmailer,我正在使用phpMailer向大量用户发送新闻稿。 在一个while循环中,我得到了每个用户的电子邮件地址: $query = "..."; if ($result = mysqli_query($link, $query)) { while ($row = mysqli_fetch_assoc($result)) { ... $mail->AddAddress($row['email']); $newbody = str_replace("[NAME]",$row['name'],$b
$query = "...";
if ($result = mysqli_query($link, $query)) {
while ($row = mysqli_fetch_assoc($result)) {
...
$mail->AddAddress($row['email']);
$newbody = str_replace("[NAME]",$row['name'],$body);
$mail->MsgHTML($newbody);
if(!$mail->send()) /* send Email */
{$_SESSION['logErrors'] .= $mail->ErrorInfo." (".$row['email'].")<br>";} else
{$_SESSION['logSent'] .= $row['email']." - ".date("H:m:s")."<br>";}
$mail->ClearAddresses();
...
} // mysqli_fetch_assoc
} // mysqli_query
您不需要修改任何内容,如果您以循环方式发送新闻稿,您可以通过以下方式完成:
$query = "...";
if ($result = mysqli_query($link, $query)) {
while ($row = mysqli_fetch_assoc($result)) {
...
$mail->AddAddress($row['email']);
...
} // mysqli_fetch_assoc
$mail->AddAddress('myemail@'); // here you add your email
} // mysqli_query
老实说,这不是发送时事通讯的最佳方式。现在,每个收到此电子邮件的人都将看到其他电子邮件的电子邮件地址,因此,如果您的某个订户是您的竞争对手,他将看到您的所有客户/用户消息。您应该单独发送电子邮件,或者使用AddBCC
而不是AddAddress
编辑
您可以通过以下方式执行此操作:
<?php
$query = "...";
if ($result = mysqli_query($link, $query)) {
$rows = [];
$record = [];
$record['name'] = 'Your name';
$record['email'] = 'Your email';
$rows[] = $record;
while ($row = mysqli_fetch_assoc($result)) {
$rows[] = $row;
}
foreach ($rows as $row) {
//...
$mail->AddAddress($row['email']);
$newbody = str_replace("[NAME]", $row['name'], $body);
$mail->MsgHTML($newbody);
if (!$mail->send()) /* send Email */ {
$_SESSION['logErrors'] .= $mail->ErrorInfo . " (" . $row['email']
. ")<br>";
} else {
$_SESSION['logSent'] .= $row['email'] . " - " . date("H:m:s")
. "<br>";
}
$mail->ClearAddresses();
//...
}
} // mysqli_query
您不需要修改任何内容,如果您以循环方式发送您的新闻稿,您可以这样做:
$query = "...";
if ($result = mysqli_query($link, $query)) {
while ($row = mysqli_fetch_assoc($result)) {
...
$mail->AddAddress($row['email']);
...
} // mysqli_fetch_assoc
$mail->AddAddress('myemail@'); // here you add your email
} // mysqli_query
老实说,这不是发送时事通讯的最佳方式。现在,每个收到此电子邮件的人都将看到其他电子邮件的电子邮件地址,因此,如果您的某个订户是您的竞争对手,他将看到您的所有客户/用户消息。您应该单独发送电子邮件,或者使用AddBCC
而不是AddAddress
编辑
您可以通过以下方式执行此操作:
<?php
$query = "...";
if ($result = mysqli_query($link, $query)) {
$rows = [];
$record = [];
$record['name'] = 'Your name';
$record['email'] = 'Your email';
$rows[] = $record;
while ($row = mysqli_fetch_assoc($result)) {
$rows[] = $row;
}
foreach ($rows as $row) {
//...
$mail->AddAddress($row['email']);
$newbody = str_replace("[NAME]", $row['name'], $body);
$mail->MsgHTML($newbody);
if (!$mail->send()) /* send Email */ {
$_SESSION['logErrors'] .= $mail->ErrorInfo . " (" . $row['email']
. ")<br>";
} else {
$_SESSION['logSent'] .= $row['email'] . " - " . date("H:m:s")
. "<br>";
}
$mail->ClearAddresses();
//...
}
} // mysqli_query
有很多方法可以做到这一点。但是,您的查询可能是这样的:
(select "1", "myemail", "my","my") union (<your_select_query>)
(选择“1”、“myemail”、“my”、“my”)联合()
但是,我建议创建一个处理数据的函数。
为您的输入调用一次,并在查询结果上调用多次。有很多方法可以做到这一点。但是,您的查询可能是这样的:
(select "1", "myemail", "my","my") union (<your_select_query>)
(选择“1”、“myemail”、“my”、“my”)联合()
但是,我建议创建一个处理数据的函数。
为输入调用一次,并在查询结果上多次调用。每次while循环后,我使用$mail->ClearAddresses()代码>,AddBCC无法与mysendmail@user2987790你在哪里发电子邮件?您使用ClearAddresses的目的是什么?这里有一个while loop
不多,所以我不知道每次while loop
之后你说的是什么意思。嘿,我更新了问题中的代码-也许我做得不对?我正在使用ClearAddresses()清除循环中的最后一个电子邮件地址-因此每个用户都会收到自己的个人电子邮件。非常感谢!我将尝试修改您的代码,因为我想从这个时事通讯脚本中获得最佳性能。我想发送大约400-500封电子邮件。是否有一种方法可以每隔20封电子邮件发送一次电子邮件,然后暂停3秒并重新启动循环?比如:Email 0-20/暂停/Email 21-40/暂停/…在每次while循环之后,我使用$mail->ClearAddresses()代码>,AddBCC无法与mysendmail@user2987790你在哪里发电子邮件?您使用ClearAddresses的目的是什么?这里有一个while loop
不多,所以我不知道每次while loop
之后你说的是什么意思。嘿,我更新了问题中的代码-也许我做得不对?我正在使用clearAddresss()清除循环中的最后一个电子邮件地址-所以每个用户都会收到自己的个人电子邮件。非常感谢!我将尝试修改您的代码,因为我想从这个时事通讯脚本中获得最佳性能。我想发送大约400-500封电子邮件。是否有一种方法可以每隔20封电子邮件发送一次电子邮件,然后暂停3秒并重新启动循环?比如:Email 0-20/pause/Email 21-40/pause/…这很好,我得到了一个新的第一行,但是列名称也变为“1”、“myemail”、“my”和“my”。但它们仍然应该是“id”、“姓名”、“电子邮件”和“组”。我将您的代码更改为:(选择“0”作为id)admin@admin.com“作为电子邮件,“我的”作为名称,“我的”作为组)联合(从表中选择*_名称)
这很好,我得到了一个新的第一行,但列名称也更改为“1”、“myemail”、“my”和“my”。但它们仍然应该是“id”、“姓名”、“电子邮件”和“组”。我将您的代码更改为:(选择“0”作为id)admin@admin.com“作为电子邮件,“我的”作为名称,“我的”作为组)联合(从表中选择*_名称)