php自动生成mysql的触发代码。

php自动生成mysql的触发代码。

如果公司里有上百个表要做触发器,如果手动写代码的话。很累,所以今天写了一个小程序,

<?php

$dbname = 'test';//数据库
$tab1 = 'user'; //执行的表
$tab2 = 'user_bak'; //被触发的表
$conn = mysql_connect("localhost","root", "root",$dbname) or die("请检查你的主机名数据库用户名和密码");
mysql_select_db($dbname, $conn) or die("数据库还没有连接");
$query = mysql_query("SHOW COLUMNS FROM $tab1");mysql_query("");
while($row=mysql_fetch_array($query,MYSQL_NUM)){//得到表的字段数组
$temp[] = $row[0];
$str1 .=  '`'.$row[0].'`,';
$str2 .=  'new.'.$row[0].',';
$str3 .=  $row[0].'=new.'.$row[0].',';
}
//insert触发器
$inser_str  = "<h1>{$tab1}表的insert触发器</h1>";
$inser_str .= "create trigger ".$tab1."_insert <br>AFTER INSERT <br>on ".$tab1."<br>";
$inser_str .="for each row<br> INSERT INTO {$tab2} (".rtrim($str1,',').') VALUES ('.rtrim($str2,',').');';
//update触发器
$update_str  = "<h1>{$tab1}表的update触发器</h1>";
$update_str  .= "create trigger ".$tab1."_update<br>";
$update_str  .= "after update<br>";
$update_str  .= "on ".$tab1.'<br>';
$update_str  .= "for each row<br>";
$update_str  .= "update ".$tab2." set ".rtrim($str3,',')." where id = new.id;//这里的where id = new.id要手动改一下。改成主键的字段名";
//delete触发器
$delete_str   = "<h1>{$tab1}表的delete触发器</h1>";
$delete_str  .= "create trigger ".$tab1."_delete<br>";
$delete_str  .= "after delete<br>";
$delete_str  .= "on ".$tab1."<br>";
$delete_str  .= "for each row <br>";
$delete_str  .= "delete from ".$tab2." where id=OLD.id//这里的where id = new.id要手动改一下。改成主键的字段名<br>";
echo $inser_str;
echo $update_str;
echo $delete_str;
echo '<p>注意:<br>1.触发器可用于InnoDB或MyISAM类型的表<br>2.插入的时候用AFTER INSERT 更好的保证数据ID的对应,如果用before INSERT有可能造成ID不对应<br>3.如new.id则是表示主表中的字段<br>4.sql语句太多,用 begin..end<br>5.使用show triggers语句查看数据库中的触发器。<br>6.删除触发器DROP TRIGGER IF EXISTS `test`<br>7.作者:<a href="http://hi.baidu.com/woaidelphi">华夏之星</a>';
echo <<<EOT
<h3>语法:</h3>
create trigger <触发器名称><br>
{ before | after}<br>
{insert | update | delete}<br>
on <表名><br>
for each row<br>
<触发器SQL语句><br>
参数详解如下:<br>
create trigger <触发器名称>:创建一个新触发器,并指定触发器的名称。<br>
{ before | after}:用于指定在insert、update或delete语句执行前触发还是在语句执行后触发。<br>
on <表名>:用于指定响应该触发器的表名。<br>
for each row:触发器的执行间隔,for each row 通知触发器每隔一行执行一次动作,而不是对整个表执行一次。<br>
<触发器SQL语句>:触发器要执行的SQL语句,如果该触发器要执行多条SQL语句,要将多条语句放在begin…end块中。
<br>如:begin…end块(它不能上phpadmin上运行。因为phpmyadmin没有对begin...end解析。)<br>
mysql_query("<br>
create trigger user_delete<br>
after delete<br>
on user<br>
for each row BEGIN<br>
delete from user_bak where id=OLD.id;<br>
delete from aaa where id=OLD.id;<br>
END;");<br>


<br><br><br><br>
EOT;
?>
PHP与MYSQL的触发器

posted on 2016-03-10 09:47 jason&li 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/ldms/p/5260660.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/288788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#趣味程序---求两个数的最大公约数和最小公倍数

using System;namespace ConsoleApplication1 {class Program{static void Main(string[] args){Console.WriteLine("请输入一个数&#xff1a;");int num1 int.Parse(Console.ReadLine());Console.WriteLine("请输入另一个数&#xff1a;");int num2 in…

php运行条件,PHP配置环境要求 php运行的先决条件

类型&#xff1a;编程相关大小&#xff1a;320KB语言&#xff1a;中文 评分&#xff1a;6.6标签&#xff1a;立即下载在本教程中&#xff0c;假设用户的服务器已经安装并运行了 PHP&#xff0c;所有以 .php 结尾的文件都将由 PHP 来处理。在大部分的服务器上&#xff0c;这是 P…

剑指offer之二维数组中查找

1 问题 二维数组中查找&#xff1a; 在一个二维数组钟&#xff0c;每一行都按照从左到右递增得顺序排列&#xff0c;每一列 都按照从上往下得递增排列&#xff0c;请完成一个函数&#xff0c;输入这样得一个二维数组和一个 整数&#xff0c;判断数组是否含有该整数 列如&…

【C语言简单说】二十:指针基础

。。据说指针很难 其实稍微理解概念不难。 先看百科的定义&#xff1a;在计算机科学中&#xff0c;指针&#xff08;Pointer&#xff09;是编程语言中的一个对象&#xff0c;利用地址&#xff0c;它的值直接指向&#xff08;points to&#xff09;存在电脑存储器中另一个地方的…

移动web开发(三)——字体使用

参考&#xff1a; 移动web页面使用字体的思考.http://www.cnblogs.com/PeunZhang/p/3592096.html

c#可变参数params的介绍

c#可变参数params的介绍作为一个netUp主&#xff0c;今天在b站刷到了java的一个视频&#xff0c;可变参数的介绍&#xff0c;所以今天给大家介绍一下c#中可变参数params的使用介绍&#xff0c;我们首先看一下官方解释: 使用 params 关键字可以指定采用数目可变的参数的params。…

Javascript中的循环变量声明,到底应该放在哪儿?

不放走任何一个细节。相信很多Javascript开发者都在声明循环变量时犹 豫过var i到底应该放在哪里&#xff1a;放在不同的位置会对程序的运行产生怎样的影响&#xff1f;哪一种方式符合Javascript的语言规范&#xff1f;哪一种方式和ecma标准未来的发展 方向匹配&#xff1f;本文…

Delphi全局热键的注册

1.在窗启动时创建ATOM;(aatom:ATOM;定义在private中&#xff09; 1 if FindAtom(ZWXhotKey)0 then 2 begin 3 aatom:GlobalAddAtom(ZWXhotKey); 4 end; 5 if RegisterHotKey(Handle,aatom,MOD_ALT,$41) then 6 begin 7 MessageBox(Handle,按alta,提示,MB_OK); 8 end; 2.定义处…

python爬取网易云音乐问题陈述_python 网易云音乐 评论爬取问题

除了使用phantomjs,selenium之外&#xff0c;怎么爬取多页评论&#xff0c;这两个都太慢了。例如http://music.163.com/#/song?i... 的 评论。webapi都是http://music.163.com/weapi/v1...&#xff0c;每页20个评论&#xff0c;怎么获取下一页的评论&#xff0c;param是加密的…

C#趣味程序----分数之和

问题:求这样的四个自然数p,q,r,s(p<=q<=r<=s),使得等式1/p + 1/q +1/r +1/s=1成立。 分析:将原式同分,化简整理后得到:2<=p<5,p<=q<7,q<r<13。 using System;namespace ConsoleApplication1 {class Program{static void Main(string[] ar…

php gearmanclient addoptions,gearman PHP7扩展安装

注&#xff1a;官方提供的只支持PHP 6&#xff0c;需要第3方支持&#xff0c;https://github.com/wcgallego/pecl-gearmanyum install libgearman-devel -y 如没装&#xff0c;则config时报错 error: Please install libgearmanwget https://github.com/wcgallego/pecl-gearm…

剑指offer之把字符串里面空格替换成百分之20

1 问题 把字符串里面空格替换成百分之20 2 代码实现 第一种时间复杂的o(n * n)实现 #include <stdio.h> #include <stdlib.h>char* insert(char *a, int len, char *replace, int replaceLen) {//先得到多少个空格char *p a;int count 0;while (*p ! \0){if (…

【C语言简单说】二十一:双重指针基础 (完结)

其实后面这两节我是用我几年前写的教程复制过来的。。。 ’ – ’ ) ( &#xff13; )╱~~ 如有错误&#xff0c;请留言提醒哈~~~尴尬的笑。 多重指针呢其实就是指向指针的指针。 首先&#xff0c;变量大家都知道是啥意思了吧&#xff1f;一个变量是有地址的。那么指针变量也是…

jquery设置滚动条距离页面顶部的高度

//获取滚动条到顶部的垂直高度 $(document).scrollTop(); //获取滚动条到左边的垂直宽度 $(document).scrollLeft(); function clickFn(){var topL0 $("#l0").offset().top;var topL1 $("#l1").offset().top;alert("l0距离顶部:"topL0)aler…

精彩回顾|「源」来如此 第六期 - 开源经济与产业投资

| 作者&#xff1a;活动组、袁睿斌| 编辑&#xff1a;金心悦| 设计&#xff1a;朱亿钦4月17日 14:00&#xff0c;由开源社联合云启资本、易观分析、云赛空间&#xff0c;以及微软 Reactor 共同主办&#xff0c;由示说网提供转播支持的「源」来如此 第六期直播活动如约而至。在本…

python中@staticmethod_Python中的@staticmethod和@classmethod的区别

一直搞不明白&#xff0c;类方法和静态方法的区别&#xff0c;特意研究了一下&#xff0c;跟大家分享一下。为了方便大家了解两者的差别&#xff0c;以下的示例代码将有助于发现其中的差别&#xff1a;class A(object):def foo(self, x):print "executing foo(%s, %s)&quo…

iOS 第三方登录之 QQ登录

一. 首先需要下载腾讯qq登录所需的库&#xff0c;下载地址是http://open.qq.com/ 。 需要用到的有TencentOpenAPI.framework 和TencentOpenApi_IOS_Bundle.bundle,将两者加入工程。 二.下面就来实现QQ第三方登录 1.声明属性&#xff0c;且viewcontroller实现TencentSessionDele…

C#趣味程序---真分数序列

问题&#xff1a;按递增顺序依次列出所有分母为40&#xff0c;分子小于40的最简真分数。 分析&#xff1a;利用最大公约数 using System;namespace ConsoleApplication1 {class Program{static void Main(string[] args){for(int i1;i<40;i){int a 40;int b i;while (b!0…

有关 php __autoload 自动加载类函数的用法

这个函数是一个自动加载类函数&#xff0c;啥事自动加载函数&#xff0c;顾名思义 &#xff0c;那就是自己就会加载类的函数&#xff08;原谅我废话了&#xff09; 我们先看下面的代码&#xff1a; <?php function __autoload($classname) {echo "helloworld";…

IP签名档PHP源码,IPCard 一款天气图标签名档源码

源码介绍本源码对接高德z地图开发者平台的API实现获取IP和天气数据并使用php将天气的图标与文字相结合&#xff0c;形成一张IP签名档图片&#xff0c;最后呈现出来使用说明首先去高德开放平台申请KEY&#xff0c;点击右上角的注册按钮并登录账号&#xff0c;进入控制台&#xf…