php-从php插入后未触发MySQL触发器
Posted
技术标签:
【中文标题】php-从php插入后未触发MySQL触发器【英文标题】:php- MySQL Trigger not fired after insert from php 【发布时间】:2017-08-22 09:15:48 【问题描述】:我的问题基本上是在 PHP 函数的 INSERT 数据之后没有触发触发器(mysql),我不知道为什么。当我从 MySQL Workbench 插入数据时,触发器会正常触发。
下面是一个示例代码以便更好地理解:
php函数:
public function insert($data)
$result = mysql_query("INSERT INTO Table(Column) VALUES('$data')");
if($result)
return true;
return false;
触发器:
delimiter //
CREATE TRIGGER last_id AFTER INSERT ON Table
FOR EACH ROW
BEGIN
SET @lastid = NEW.Id;
END;//
最后,例如,当我从 MySQL Workbench 执行此查询时:
INSERT INTO Table(Column) VALUES(1)
触发器正常触发。
注意: PHP 函数也成功插入数据,唯一的问题是它没有触发触发器。
【问题讨论】:
我觉得你应该使用 insert into Table(lastid) Values(New.id) 而不是 SET @lastid=New.ID @aroy Alejo 已经说过触发器在从工作台插入时执行。这意味着触发器没有问题 感觉OP需要升级到mysqli ***.com/questions/13569/… 【参考方案1】:我最近在为我的数据库课程做一个迷你项目时遇到了同样的问题,在 MySQL 终端上的研究和 headbanging 会话之后,我发现你正在设置和更新的变量 (@lastid
) 是客户端实例仅变量,其寿命和范围仅适用于该连接实例。真正发生的是,当您从 PHP 更新变量时,您实际上使用的数据库连接实例与 MySQL 工作台的连接实例不同。因此,实际上您通过 PHP 查询执行的插入事件触发器正在执行,但您无法看到结果,因为您正在从不同的连接实例(Workbench 实例)检查它。
为了弄清楚这个问题,使用命令行界面打开两个连接到同一个数据库, 从一个实例设置变量并尝试从另一个实例访问它。您将在第二个终端上得到一个空值。
知道了这一切,现在使用您用来通过 PHP 插入值的同一连接来检索您正在创建或更新的临时变量。
public function insert($data)
$result = mysql_query("INSERT INTO Table(Column) VALUES('$data')");
if($result)
return true;
$result = $connection->query("select @lastid"); //create your own connection
if(!$result) die($connection->error);
$row = $result->fetch_array();
echo $row[0];
当您使用相同的连接实例变量时,这可能会给您想要的结果。
【讨论】:
以上是关于php-从php插入后未触发MySQL触发器的主要内容,如果未能解决你的问题,请参考以下文章