You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现每日自动查询MySQL变更并通过PHP发送邮件?

嘿,我来帮你理清楚这个需求的解决思路——你已经掌握了数据库查询和邮件发送的核心逻辑,现在卡壳的就是无交互自动化触发的部分对吧?咱们一步步说:

绝对不推荐:用无限循环实现

无限循环确实能让脚本一直运行并定期检查,但这是个非常糟糕的方案:

  • 它会一直占用一个PHP进程,如果服务器的PHP进程数有限,很可能会阻塞其他脚本的运行;
  • 一旦脚本因为内存溢出、服务器重启或者意外崩溃,整个监控就停了,可靠性极低;
  • 后期维护也麻烦,你得时刻盯着这个进程有没有挂掉。
正确的姿势:用系统定时任务(Cron)

这是服务器端自动化脚本的标准解决方案,完全不需要浏览器或用户触发,到点自动执行,稳定又省心。

具体步骤

  • 先写好你的业务脚本:比如命名为monitor_db_changes.php,里面包含:
    1. 查询数据库的新增/变更数据(建议记录上次执行的时间戳,只查这个时间点之后的数据,避免重复处理);
    2. 如果有符合条件的数据,执行邮件发送逻辑;
    3. 更新上次执行的时间戳(存在数据库或者本地配置文件里都可以)。
  • 配置定时任务:
    • Linux系统用cron,比如你想每15分钟检查一次,就编辑Cron任务:
      crontab -e
      
      然后添加一行:
      */15 * * * * php /var/www/html/monitor_db_changes.php
      
      解释下:*/15表示每15分钟执行一次,后面的四个*分别对应小时、日期、月份、星期,按需调整就行。
    • Windows系统用「任务计划程序」,创建一个定时任务,指定PHP.exe的路径和你的脚本路径,设置执行频率即可。
语言选择:PHP完全够用,没必要换

你已经熟悉PHP的数据库操作和邮件发送,完全没必要为了这个需求切换到其他语言。PHP处理这类轻量的定时任务非常顺手,学习成本为0。如果后续有更复杂的需求(比如高并发、大数据处理),再考虑Python/Go这些也不迟。

额外小提示:避免重复发送邮件

一定要记录上次脚本执行的时间戳,比如在数据库里建个task_log表,或者用一个本地的last_run.txt文件存时间戳。每次脚本运行时,只查询这个时间戳之后新增或修改的数据,这样就不会重复发送相同的邮件啦。举个简单的PHP示例:

// 读取上次执行时间(这里用文件示例,你也可以存在数据库)
$last_run_file = 'last_run.txt';
$last_run_time = file_exists($last_run_file) ? intval(file_get_contents($last_run_file)) : 0;

// 查询最近更新的数据
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'user', 'pass');
$stmt = $pdo->prepare("SELECT * FROM your_table WHERE updated_at > ?");
$stmt->execute([date('Y-m-d H:i:s', $last_run_time)]);
$changes = $stmt->fetchAll(PDO::FETCH_ASSOC);

// 有变更就发邮件
if (!empty($changes)) {
    // 这里写你的邮件发送逻辑
    send_email($changes);
}

// 更新上次执行时间为当前时间
file_put_contents($last_run_file, time());

内容的提问来源于stack exchange,提问作者Ingimar Eyfjord Smarason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 10:02:29