每个会话更改MySQL模式

时间:2016-02-08 15:33:41

标签: php mysql restriction strict

我有一个支持旧应用程序的开发人员要求我在全局范围内更改我们的MySQL模式 - 但是我们在同一台服务器上有几个显然需要严格模式的其他数据库。

我相信可以在会话级别更改模式,并且我已尝试使用以下代码来执行此操作。

session_start();

include_once("./includes/conn.php");
mysql_query("SET SESSION sql_mode = ''");

但这似乎不起作用 - 测试模式报告全局和会话值是相同的。

session User : name
session Security : 27478239

MySQL server version : 5.5.5-10.0.23-MariaDB
GLOBAL : STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
SESSION : STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

是否可以在会话级别(或数据库级别)更改SQL模式,如果可以,如何实现?

1 个答案:

答案 0 :(得分:2)

two syntaxes(嗯,actually three)来更改会话值,所有这些都应该是等效的:

protected override bool IsAuthorized(HttpActionContext actionContext)
    {
        if (System.Web.HttpContext.Current.Session["Role"] == null) return false;
        string role = (string)System.Web.HttpContext.Current.Session["Role"];

        if ((role == "Admin" || role == "Super Admin") //recycling your condition
           && IsPermitted == PermissionsEnum.Administration) return true;

        if ((role == "Collaborator"
           && IsPermitted == PermissionsEnum.Collaborator) return true;

        return false;
    }

要读回值:

SET SESSION sql_mode = '';
SET @@SESSION.sql_mode = '';
SET @@sql_mode = '';

当然,因为它是一个会话值:

  • 它不会影响全局设置
  • 它不会在当前会话之后存活
  • 它不会泄漏给其他会议