2017-07-28 70 views
5

我使用的是经典的ASP和MySQL(使用PHP不会改变问题的关键)。在mysql中只设置一个变量一次

我需要在我的主页上设置一个变量:

SET block_encryption_mode = 'aes-256-cbc' 

为其他用户所使用的服务器,我不能将其设置为全局变量,可以使用默认的block_encryption_mode

我知道我可以在每个网页的开始处使用ASP/PHP语句,但似乎使用了太多的资源;每个用户都会在每个页面上执行SET语句...

有没有一种方法可以在每个会话的开始时设置变量或执行一些其他SQL语句,就像ASP这样的onstart事件,也许呢?或者我怎样才能实现我的目标,而不是每个用户在我拥有的每个页面上执行查询?

回答

2

在每个页面上调用SET是安全的,因为它以毫秒级的顺序执行。在已经打开的连接上几乎没有开销SET

除非你可以全局应用这个设置,否则我不打扰。在获取数据库连接句柄之后,请直接设置block_encryption_mode(连同collationtimezone)。

+1

但是这个字符串就执行每个客户端上,也从不想这一套是存在其他网站... – Jerry2

+0

因为我知道block_encryption_mode是一个会话变量,所以使用SET不应该影响其他客户端。另外,我认为你需要管理员权限才能比自己的会话设置更多的值。 –

3

您可以使用init_connect变量。

服务器为每个连接的客户端执行的字符串。该字符串由一个或多个SQL语句组成,用分号字符分隔。

您也可以使用代码区分用户是这样的:

IF (CURRENT_USER() = '[email protected]') THEN 
    SET SESSION block_encryption_mode = 'aes-256-cbc'; 
END IF; 
相关问题