我在REST API中建立了一个MySQL连接(在我的例子中是PDO,但它并不重要)。
REST API使用内部身份验证(用户名/密码)。有多个用户组访问REST API,例如客户,IT,后端,客户服务。它们最终都使用相同的MySQL连接,因为它们大多数时候也使用相同的端点。
在MySQL数据库中,我想保存负责更改数据集的用户。
我想通过触发器在MySQL层上实现它。因此,我必须以某种方式将REST API中的用户信息传递给此触发器。有一些MySQL调用,如CURRENT_USER()
或status
,可以查询元信息。我的想法是以某种方式将连接字符串中的其他信息传递给MySQL,这样我就不必使用不同的数据库用户,但我仍然可以从触发器中检索这些信息。
我已经做过一些研究,并且不认为这是可能的,但是因为它会很好地促进我的任务,所以我仍然想询问是否有人确实知道我的问题的解决方案。
答案 0 :(得分:3)
我会在connect上设置一个会话变量。
感谢@ÁlvaroGonzález的评论,提醒我在PDO init上运行命令。
无需将数据添加到临时表的建议。设置一个或多个会话变量同样好,假设您只需要一些标量。
$pdo = new PDO($dsn, $user, $password, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET @myvar = 'myvalue', @myothervar = 'othervalue'"
]);
通过调用$pdo->exec()
,也可以在连接后的任何时间设置会话变量。
$pdo->exec("SET @thirdvar = 1234");
您可以在SQL查询中读取会话变量:
$stmt = $pdo->query("SELECT @myvar, @myothervar");
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
print_r($row);
}
您还可以在触发器中读取会话变量:
CREATE TRIGGER mytrig BEFORE INSERT ON mytable
FOR EACH ROW
SET NEW.somecolumn = @myvar;