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