【发布时间】:2018-08-28 15:35:07
【问题描述】:
我设置了一个每分钟运行一次代码的 cronjob。此代码的目标是连接到 Mysql 并将某个列更新为新值,如果该值已在数据库中存在 1 分钟。同时,我想同时向同一行中存在的电子邮件地址发送一封电子邮件。表的例子。
| id | title | status | email |
+----+-------+--------+-------------------+
| 1 | title | 1 | email@example.com |
+----+-------+--------+-------------------+
| 2 | titl2 | 1 | email1@example.com|
+----+-------+--------+-------------------+
cron 作业运行后,表变为
| id | title | status | email |
+----+-------+--------+-------------------+
| 1 | title | 2 | email@example.com |
+----+-------+--------+-------------------+
| 2 | titl2 | 2 | email1@example.com|
+----+-------+--------+-------------------+
此时我想向行状态变为 2 的电子邮件发送电子邮件
这是我尝试的代码。
<?php
// Create connection
$conn = mysqli_connect('localhost', 'username', 'password', 'dbname');
// Check connection
if ($conn) {
mysqli_query($conn, "UPDATE jobs SET status = 2 WHERE created < (NOW() - INTERVAL 1 MINUTE)");
$em = mysqli_query($conn, "SELECT email FROM jobs WHERE status = '2' < DATE(NOW() - INTERVAL 1 MINUTE)");
}
mysqli_close($conn);
?>
<?
while ($row = mysqli_fetch_array($em)) {
$from = 'email@myemail.com';
$to = $row['email']; // The column where your e-mail was stored.
$subject = 'Sample Form';
$msg = 'Hello world!';
mail($to, $subject, $msg, $from);
}
?>
【问题讨论】:
-
为什么应该是
$row_['email']而应该是$row['email']? -
抱歉,这是一个小错误。该代码将电子邮件发送到所有电子邮件地址,即使是很久以前更改过的地址。我希望代码仅为状态变为 2 的新电子邮件地址发送电子邮件
-
在更改状态之前不能发送电子邮件吗?例如:
SELECT email WHERE status = 1 AND created < (NOW() - INTERVAL 1 MINUTE) -
状态变化后发送邮件。因为电子邮件会通知帖子已被停用。 status = 1 表示激活。 status =2 表示停用
-
我知道,我的意思是您可以在更新状态之前发送一封电子邮件。但是如果你想更新后发送电子邮件,那么...
SELECT email FROM jobs WHERE status = '2' < DATE(NOW() - INTERVAL 1 MINUTE)应该是SELECT email FROM jobs WHERE status = '2' AND created < DATE(NOW() - INTERVAL 1 MINUTE),不是吗?