如何从php变量中清除值并重用该变量

如何从php变量中清除值并重用该变量,php,phpmailer,sendmail,Php,Phpmailer,Sendmail,此代码从邮件表向所有员工发送电子邮件,其中COL为Id、姓名、电子邮件。现在比如说,, 如果有3名员工,则第一名员工将获得所有3份工资单作为附件,第二名员工将获得第二份和第三份工资单,第三名员工仅获得第三份工资单。我认为存储的电子邮件值造成了问题,因此我想清除存储在$sendto、$pdf和$filename变量中的数据。我尝试过apc_delete、unset和$var=但都不起作用 代码如下: <?php //require 'mailerClass/PHPMailer

此代码从邮件表向所有员工发送电子邮件,其中COL为Id、姓名、电子邮件。现在比如说,, 如果有3名员工,则第一名员工将获得所有3份工资单作为附件,第二名员工将获得第二份和第三份工资单,第三名员工仅获得第三份工资单。我认为存储的电子邮件值造成了问题,因此我想清除存储在$sendto、$pdf和$filename变量中的数据。我尝试过apc_delete、unset和$var=但都不起作用

代码如下:

    <?php
    //require 'mailerClass/PHPMailerAutoload.php';
    require_once '../connect.php';
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;

    //Load composer's autoloader
    require 'vendor/autoload.php';

    $mail = new PHPMailer;
    ini_set('max_execution_time', 300); //300 seconds = 5 minutes
    $cin =1;
    $sql = "SELECT * FROM mail";
    $query = mysqli_query($con, $sql);
    $count = mysqli_num_rows($query);
    try {
    while($row = mysqli_fetch_array($query, MYSQL_ASSOC)){
    //
        $sendto = $row['Email'];
        //attachment pdf files path array
        $path = "C:/Reports/";
        $file = $row['Name'];
        $extension = ".pdf";
        $filename = $file.$extension;
        $pdf = $path. $file. $extension ;



        //Server settings
        $mail->SMTPDebug = 2;                                 // Enable verbose debug output
        //$mail->isSMTP();                                      // Set mailer to use SMTP
        $mail->Host = 'smtp.mail.yahoo.com';  // Specify main and backup SMTP servers
        $mail->SMTPAuth = true;                               // Enable SMTP authentication
        $mail->Username = 'username@yahoo.com';                 // SMTP username
        $mail->Password = '@password';                           // SMTP password
        $mail->SMTPSecure = 'ssl';                            // Enable TLS encryption, `ssl` also accepted
        $mail->Port = 465;      //587;                                    // TCP port to connect to

        //Recipients
        $mail->setFrom('mediakraft64@yahoo.com');
        $mail->addAddress($sendto);     // Add a recipient

        $mail->addReplyTo('mediakraft64@yahoo.com');
        $mail->addCC('mediakraft64@yahoo.com');
        //$mail->addBCC('bcc@example.com');

        //Content
        $mail->isHTML(true);                  // Set email format to HTML
        $mail->Subject = 'Payslip';
        $mail->Body    = 'Payslip from Mediakraft Check file attachment';
        $mail->AltBody = 'Payslip from Mediakraft Check file attachment';

    $mail->SMTPOptions = array(
        'ssl' => array(
            'verify_peer' => false,
            'verify_peer_name' => false,
            'allow_self_signed' => true
        )
    );



        $mail->addAttachment($pdf, $filename);      //= $_POST['mypdf'];

        $mail->send();
        echo 'Message has been sent';

    //unset($sendto);
    $sendto = " ";
    $pdf = " ";
    $mail->clearAttachments();
    sleep(5);

    } //end while

    echo"<script>alert('Email Sent... Successfully'); document.close();</script>";

    } catch (Exception $e) {
        echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
    }
    ?>
有什么帮助吗


谢谢

如果要重用该变量,只需重新为其指定一个新值即可:

$a = 1;
$a = "a string";
$a = new MyClass();
如果PHP引擎需要,旧值会自动删除。您不必担心这一点。

取消设置将删除变量和内容。调用unset$a后引用$a将抛出错误。此外,您还必须考虑正在取消设置的变量的范围,以及它是通过引用还是通过函数内的副本传递的

要仅删除内容,没有特定的内置PHP指令。如果您必须发出该变量不再保存有效数据的信号或释放它当前使用的内存,只需将null或false赋值给它即可


没有清除变量这样的事情。您可以使用empty来查看PHP是否认为变量是空的。

重用部分是次要的,主要是清除存储在变量中的数据问题是。。变量从sql表中获取电子邮件id并发送邮件,然后在while循环的下一次迭代中,它保留第一个电子邮件id,还获取第二个电子邮件id并将下一封邮件发送到这两个id..:这与取消设置变量无关,因为循环的每次迭代都会将另一个收件人添加到同一个$mail实例中。您需要在发送每封电子邮件后清除收件人,就像清除附件一样。是$mail->clearaddAddress;谢谢@iainn,问题解决了。