将 PHP 变量传递给 MySQL 触发器 #nette

Pass PHP variable to MySQL trigger #nette

我在数据库中创建了触发器。我需要将 PHP 变量传递给该触发器。

我尝试在 PhpMyAdmin 中执行类似的操作:

SET @myVariable = 123;
INSERT INTO table (foo) VALUES (bar);

触发器成功获取@myVariable - 所以我在Nette项目中尝试了它,但我没有成功。

首先,Prepared Statement只能执行一个命令,所以不能同时调用SET和INSERT。

然后我发现信息说变量应该对整个连接有效,所以我尝试在连接到数据库后调用$database->query('SET @myVariable = 123');。然后我尝试了插入。但是,我还是没有成功。

有人知道如何将 PHP 变量传递给触发器吗?

设置变量适合QUERY命令。从不连接字符串,始终添加带问号的参数(SQL 注入漏洞)

$database->query('SET @myVariable = ?', 123);
$database->query('INSERT INTO table ?', ['foo' => bar]);

要将变量显式设置为特定值,请使用 SET 语句。

语法:

SET @variable = value

例如:

$db->query('SET @myVariable=?', '123' ); OR use mysql as mention above.

设置变量的值一直存在,直到您为其分配另一个值或会话结束。

因此您可以使用 select 语句在触发器中获取变量。

语法:

SELECT @variable;

例如:

触发中

IF (condition) THEN
  SET myVariable_t = (SELECT @myVariable);
   INSERT INTO table
     SET column_name = myVariable_t,          
END IF;

出于某种原因,问题出在我将变量与字符串一起使用时。当我将整数值赋给变量时,一切正常。