Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何修改mysqli结果?(将一行添加到结果)_Php_Mysql_Mysqli_Phpmailer - Fatal编程技术网

Php 如何修改mysqli结果?(将一行添加到结果)

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

我正在使用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'],$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“作为电子邮件,“我的”作为名称,“我的”作为组)联合(从表中选择*_名称)