こんにちは、MySQL テーブルに行が追加されるたびに、MySQL に自動的に自分自身に電子メールを送信する方法があるかどうか疑問に思っていましたか?
			
			14241 次
		
2 に答える
            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、通知を送信して設定しますsent = 1
私の知る限り、bin ログを読み取らずに DB からその情報を取得する最良の方法です。
cron で実行するスクリプトの例が必要な場合:
#!/bin/bash
DB_USER=''
DB_PASS=''
DB_NAME=''
ID=`mysql -u$DB_USER -p$DB_PASS $DB_NAME -Bse "SELECT notification_id FROM notification_queue WHERE sent=0 LIMIT 1;"`
if [[ ! -z $ID ]] 
then
    # SEND MAIL HERE
    RESULT=`mysql -u$DB_USER -p$DB_PASS $DB_NAME -Bse "UPDATE notification_queue SET sent=1 WHERE notification_id = $ID;"`
    echo "Sent"
fi
于 2013-09-09T23:48:20.273   に答える
    
    
            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
    }
} 
于 2014-10-24T07:05:12.350   に答える