gpt4 book ai didi

php - 在许多操作中使用 mysql 变量 Symfony

转载 作者:行者123 更新时间:2023-11-29 05:03:53 25 4
gpt4 key购买 nike

我在访问之前设置的 mysql 变量时遇到问题。

在单 Controller 方法中我这样做:

public function indexAction()
{
$em = $this->getDoctrine()->getManager();
/* @var $connection Connection */
$connection = $em->getConnection();
$connection->executeQuery('SET @user_id = 1;');

return [];
}

然而,在另一个我想得到这个值:

public function listAction(Request $r)
{
$em = $this->getDoctrine()->getManager();
/* @var $connection Connection */
$connection = $em->getConnection();

var_dump($connection->executeQuery('SELECT @user_id;')->fetchColumn());exit;
}

当以相同的方式转储并且相同的变量在其创建后立即存在时,该值存在。我需要这个变量,因为我有一个触发器来获取这个变量。

我做错了什么?

最佳答案

由于 mysql 用户定义变量的工作方式,您试图实现的目标几乎是不可能的。

User-defined variables are session specific. A user variable defined by one client cannot be seen or used by other clients ... All variables for a given client session are automatically freed when that client exits

来自 https://dev.mysql.com/doc/refman/8.0/en/user-variables.html

异常(exception)情况是:

(Exception: A user with access to the Performance Schema user_variables_by_thread table can see all user variables for all sessions.)

来自 https://dev.mysql.com/doc/refman/8.0/en/user-variables.html

您在示例中呈现的两个操作是两个不同的 php 进程,它们通常不共享 mysql session ,因此它们不会共享 mysql 用户定义的变量。我不知道你的主要目标是什么,但即使共享变量,如果你有多个用户,脚本也不会正常工作,因为在某些情况下,你的变量将被并发用户覆盖,例如:

User with id 1 visits the indexAction and sets the variable @user_id to "1", User with id 2 visits the indexAction and sets the variable to "2". User with id 1 visits the the listAction and the variable will be "2" instead of "1".

我认为您应该重新考虑您的实现。如果你给我更多关于你的目标的信息,那么也许我可以提供一些建议。在不知道更多细节的情况下,您实际需要的是使用用户 session 在操作之间传递变量。像这样

public function indexAction()
{
$this->get('session')->set('user_id', $id);
return [];
}

public function listAction(Request $r)
{
$this->get('session')->get('user_id');
}

希望对您有所帮助,

亚历山德鲁·科索伊

关于php - 在许多操作中使用 mysql 变量 Symfony,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52417752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com