【问题标题】:Update statement inside fetch_assoc()fetch_assoc() 中的更新语句
【发布时间】:2015-10-14 07:37:10
【问题描述】:

我是一名 DBA,目前担任我自己的开发人员。我正在为一个培训系统上的一些自动电子邮件编写一个 PHP 模板,该模板将定期吸引不活跃的学生。我认为,我在更新中的 WHERE 语句仅影响当前记录时遇到了问题。我可以通过删除 WHERE 语句来更新所有记录,但没有。

谁能看到我的错误?我的主要查询和邮件功能运行良好。

<?php

$link = mysqli_connect('localhost','xxx','xxx','xxx');

$result = mysqli_query($link, 'SELECT email1 FROM email_test WHERE last_login < (NOW() - INTERVAL 45 DAY) AND email_number=0');

if($result->num_rows >= 1){
$subject = "A test of the email CRON";
$message='It has been 45 days since your last login.';

while($row=$result->fetch_assoc()) {

$email="{$row['email1']}"; 

mysqli_query($link, 'UPDATE email_test SET email_number = 1, email_sent = NOW() WHERE email1=$email');

mail($email, $subject, $message); }
}
?>

【问题讨论】:

    标签: php mysql fetch


    【解决方案1】:

    您的报价需要修正:

    mysqli_query($link, 'UPDATE email_test SET email_number = 1, email_sent = NOW() WHERE email1=$email');
    

    应改为:

    mysqli_query($link, "UPDATE email_test SET email_number = 1, email_sent = NOW() WHERE email1='$email'");
    

    在 php 中,变量用双引号解析,而变量不用单引号解析。

    【讨论】:

    • 谢谢!只见树木不见森林。
    • 在相关说明中:我计划使用其中 3 个语句来通知学生各种标准,并在 CRON 中调用他们。我可以将所有 3 个 &lt;?php ?&gt; 调用放在同一个文本文件中并调用一次,还是我需要 3 个单独的文件并单独调用它们。他们都将查询相同的表。
    • 您可以根据需要将所有 3 个文件放在同一个文本文件中。如果你愿意,你也可以把它们分开;)
    【解决方案2】:

    如果 email1 是一个字符串,那么它必须用引号引起来

    mysqli_query($link, 'UPDATE email_test SET email_number = 1, email_sent = NOW() WHERE email1="' . $email .'"');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-18
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多