如何在php-mysql中编写触发器

如何在php-mysql中编写触发器,php,codeigniter,Php,Codeigniter,在我的php网站中,管理员必须每周更新网站内容。如果他忘了更新数据,我想给他发一封电子邮件提醒。这怎么可能?是否可以从后端发送邮件。我已经在谷歌上搜索过了,我们可以写触发器了。但是我不知道怎么做。任何人都可以帮助我。如果您的网络主机允许您执行计划的作业,您也可以在不触发的情况下执行此操作。您可以定期运行一个php脚本来检查数据库并发送电子邮件。MySQL触发器语法 为了创建触发器,可以使用CREATETRIGGER语句。以下说明了CREATE TRIGGER语句的语法: CREATE TRIGG

在我的php网站中,管理员必须每周更新网站内容。如果他忘了更新数据,我想给他发一封电子邮件提醒。这怎么可能?是否可以从后端发送邮件。我已经在谷歌上搜索过了,我们可以写触发器了。但是我不知道怎么做。任何人都可以帮助我。

如果您的网络主机允许您执行计划的作业,您也可以在不触发的情况下执行此操作。您可以定期运行一个php脚本来检查数据库并发送电子邮件。

MySQL触发器语法

为了创建触发器,可以使用CREATETRIGGER语句。以下说明了CREATE TRIGGER语句的语法:

CREATE TRIGGER trigger_name trigger_time trigger_event
 ON table_name
 FOR EACH ROW
 BEGIN
 ...
 END
让我们更详细地检查上面的语法

将触发器名称放在CREATETRIGGER语句之后。触发器名称应遵循命名约定[触发器时间][表名][触发器事件],例如在更新之前

触发激活时间可以是之前或之后。定义触发器时必须指定激活时间。如果希望在表上进行更改之前处理操作,则使用BEFORE关键字;如果需要在进行更改之后处理操作,则使用AFTER关键字

触发器事件可以是插入、更新和删除。这些事件导致调用触发器。触发器只能由一个事件调用。要定义由多个事件调用的触发器,必须定义多个触发器,每个事件一个

触发器必须与特定表关联。没有表触发器将不存在,因此必须在ON关键字后指定表名

SQL代码位于开始关键字和结束关键字之间

新旧关键字帮助您更高效地开发触发器。旧关键字是指更改数据前的现有记录,新关键字是指更改数据后的新行

MySQL触发器示例

让我们开始在MySQL中创建一个触发器来审核employees表的更改

首先,我们在MySQL示例数据库中有employees表,如下所示:

其次,我们创建一个名为employees_audit的新表来保存员工记录的更改。以下脚本创建employee_审核表

CREATE TABLE employees_audit (
   id int(11) NOT NULL AUTO_INCREMENT,
   employeeNumber int(11) NOT NULL,
   lastname varchar(50) NOT NULL,
   changedon datetime DEFAULT NULL,
   action varchar(50) DEFAULT NULL,
   PRIMARY KEY (id)
)
第三,我们创建在对员工记录进行更改之前要调用的BEFORE UPDATE触发器

DELIMITER $$
CREATE TRIGGER before_employee_update
    BEFORE UPDATE ON employees
    FOR EACH ROW BEGIN

    INSERT INTO employees_audit
    SET action = 'update',
        employeeNumber = OLD.employeeNumber,
        lastname = OLD.lastname,
        changedon = NOW();
END$$
DELIMITER ;
如果查看该模式,您将在employees表下看到before_employee_update触发器,如下所示:

现在是时候更新员工记录来测试触发器是否真的被调用了

UPDATE employees
SET lastName = 'Phan'
WHERE employeeNumber = 1056
要检查UPDATE语句是否调用了触发器,我们可以使用以下查询查询employees_audit表:

SELECT *
FROM employees_audit
以下是查询的输出:

如您所见,我们的触发器被真正调用,因此我们在employees_audit表中有一个新记录

CREATE TABLE employees_audit (
   id int(11) NOT NULL AUTO_INCREMENT,
   employeeNumber int(11) NOT NULL,
   lastname varchar(50) NOT NULL,
   changedon datetime DEFAULT NULL,
   action varchar(50) DEFAULT NULL,
   PRIMARY KEY (id)
)

在本教程中,您学习了如何在MySQL中创建触发器。您已经编写了一个触发器来审核employees表的更改。

如果在Linux上托管,则计划的作业称为
cron
作业。根据任务的紧急程度,此作业每周可以运行1到2次。PHP scrpt还可以记录发送的电子邮件提醒。@Marc Audet。。非常感谢。但是你能帮我做cron的工作吗。这是我第一次做这样的工作。你的问题不清楚。您是想安排一封电子邮件,还是想生成某种定期发送的报告?它与数据库相关吗?如果是,是什么类型的数据库(一些答案假设为MySQL)?一周运行几次的简单php脚本,检查您表中最新创建的\u at或更新的\u at字段,如果它>=7天,则发送邮件是最简单的方法。您想要基于CodeIgniter的解决方案并作为cron作业运行吗?我正在CodeIgniter中创建我的站点。您的PHP是作为模块运行还是作为快速CGI运行?现在需要知道php可执行文件的绝对路径(对于命令行)