我的MySQL表更新后如何收到电子邮件?

时间:2013-09-09 20:49:40

标签: mysql insert sql-update

您好,我想知道MySQL是否有办法在MySQL表中添加行时自动向自己发送电子邮件?

2 个答案:

答案 0 :(得分:8)

实现这一目标的最佳方法是使用触发器和cron。创建“通知队列”表,并在所需表中插入行时使用触发器填充该表。

例如

CREATE TABLE `notification_queue` (
  `notification_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `sent` tinyint(1) unsigned NOT NULL,
  PRIMARY KEY (`notification_id`)
);

然后定义一个简单的触发器:

DELIMITER $$
CREATE TRIGGER t_notification_insert 
AFTER INSERT ON [table_being_inserted]
FOR EACH ROW 
BEGIN 
    INSERT INTO `notification_queue` (`sent`) VALUES (0);
END$$
DELIMITER ;

从那时起,您需要做的就是在服务器上运行crontab(比如每分钟),从notification表中选择sent = 0,发送通知并设置{{1} }}

据我所知,这是在不阅读bin日志的情况下从数据库中获取信息的最佳方式。

如果您需要使用cron运行脚本的示例:

sent = 1

答案 1 :(得分:2)

您可以获取lastInsertedId,如果不是零则发送电子邮件。

$db = new PDO('mysql:host=localhost;dbname=data','root','');

function insertData(){
    global $db;
    $db->exec("INSERT INTO `albums`(`Artist`, `Album`, `Year`, `Cover`, `Tracks`) VALUES ('Cosmic Gate','Start to feel','2014','cover.jpg',13)");
    $id = $db->lastInsertId();
    //returns last inserted ID
    return $id;
}

function selectData($id){
    global $db;
    $results = $db->query("SELECT * FROM albums WHERE ID = $id");
    $results = $results->fetchAll(PDO::FETCH_ASSOC);
    $message = "Artist: ".$results[0]['Artist']."\n"."Album: ".$results[0]['Album'];
    return $message;
}
$email = insertData(); //get last inserted id
$EmailTo = "tentenpeter48@gmail.com";
$subject = 'mysql update';
$message = "New data inserted: \n".selectData($email);

if($email != 0){

    if(mail($EmailTo, $subject, $message)){
        echo 'success'; // for testing
    }
}