能否在MySQL插入时执行PHP代码?

4

我想在数据库中添加记录后通过邮件或其他方式通知用户,这是否可能?例如使用ON INSERT触发器执行一些PHP代码?


4
为什么需要这样做?难道你不会从 PHP 代码中插入吗? - Shameer
@Shameer,我正在使用WordPress插件,我不知道或者说弄清楚这是在哪里处理的会花费很长时间,我猜... - Jiew Meng
不会花太多时间。检查插件目录以找出将代码插入到数据库中的是哪段代码。然后在成功插入后编写邮件函数。 - Shameer
5个回答

3

您不能使用mysql事件执行PHP脚本。

您必须在PHP端执行此操作。

检查插入命令是否成功执行并发送邮件。


2

只需检查插入是否成功,然后向客户发送电子邮件。


1

在mysql查询中不能执行php代码,但你可以检查查询是否成功并发送邮件,mysql_query()会返回一个布尔值(truefalse)。如果你正在使用php,那么让我们以正确的方式使用它吧 ;)

if(mysql_query('// your query here')){
   //mail someone
}

1

通过安装MySQL sys_exec UDF,可以在MySQL触发器中执行外部程序。

然而,这样做似乎是一种额外的负担。为什么要让MySQL触发通知,当插入数据的是PHP,并且此时您已经知道输入了数据呢?


我正在使用WordPress插件,但我不知道这是在哪里处理的...浏览代码需要时间。 - Jiew Meng
相信我,像这样改变MySQL,创建触发器,调用外部程序,处理错误比挖掘插件代码要麻烦得多。 - Michael J.V.

0

在数据库插入/修改/删除时生成通知(电子邮件等)的最快最简单的方法是从执行数据库更改的脚本中进行。

<?php
$res = mysql_query( 'INSERT INTO `table` ( `field1` ) VALUES ( "One" )' );
if( $res ){
 # Send Notification
}
?>

如果您无法自行执行数据库操作(出于某种原因),或者希望能够执行定时摘要(每小时、每天、每周),那么您需要使用类似Cron Job的东西来轮询数据库并检查更改。
<?php
# A file containing an integer which is the Highest ID in the table
$indexFile = 'lastIndexID.txt';
# Get that Highest ID from the file, if it exists
$lastIndex = 0;
if( file_exists( $indexFile  )
  $lastIndex = (int) file_get_contents( $indexFile );
# Check the Database
$res = mysql_query( 'SELECT `id` FROM `table` ORDER BY `id` DESC LIMIT 1' );
if( $res && mysql_num_rows( $res )==1 ){
  $row = mysql_fetch_assoc( $res );
  # Check if the ID has increased (ie new rows added)
  if( $row['id']>$lastIndex ){
   # Send Notification
    # The number of New Rows will be the difference between $row['id'] and $lastIndex
   # Update the Index File
    file_put_contents( $indexFile , $row['id'] );
  }
}else{
 # An Error Occurred
}
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接