sql >> Database teknologi >  >> RDS >> Mysql

Hvordan kan jeg modtage en e-mail, når min MySQL-tabel er opdateret?

Den bedste måde at opnå dette på ville være at bruge en trigger og en cron. Opret en "meddelelseskø"-tabel, og udfyld den med en trigger, når en række indsættes i den ønskede tabel.

f.eks.

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

Definer derefter en simpel trigger:

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 ;

Fra det tidspunkt er alt hvad du skal gøre at få en crontab til at køre på serveren (f.eks. hvert minut), som vælger fra notification tabel hvor sent = 0 , send meddelelsen og indstil sent = 1

Så vidt jeg ved, er det den bedste måde at få disse oplysninger ud af databasen uden at læse bin-logfilerne.

Hvis du har brug for et eksempel på scriptet til at køre med 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


  1. Hvad er den bedste måde at få adgang til en database fra PHP?

  2. COALESCE i laravel

  3. ACID-egenskaberne for erklæringer og transaktioner

  4. Er udvalgte rullefelter sårbare over for enhver form for injektion