【问题标题】:Setting MySQL session variables using PDO()使用 PDO() 设置 MySQL 会话变量
【发布时间】:2013-03-29 17:48:19
【问题描述】:

我正在使用 PHP 的 PDO 来访问我的 MySQL 数据库。我通常为我的连接创建一个单例类。我想在启动连接时设置一个 MySQL 会话变量,稍后也是如此。有关我设置 MySession1 和 MySession2 的失败尝试,请参见下文。我怎样才能做到这一点?谢谢

编辑。刚刚发现如果您只使用一个@,它就可以工作。我最初使用两个 @@ 符号,我认为 http://dev.mysql.com/doc/refman/5.0/en/using-system-variables.html 的文档是必需的。我如何误解了文档?

class db {
    private static $instance = NULL;
    private function __construct() {}   //Make private
    private function __clone(){}   //Make private
    public static function db() //Get instance of DB
    {
        if (!self::$instance)
        {
            self::$instance = new PDO("mysql:host=localhost;dbname=myDB", 'myUsername', 'myPassword');
            self::$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            self::$instance->exec('SET @MySession1=123');
        }
        return self::$instance;
    }
}

db::db()->exec('SET @MySession2=321');

$stmt=db::db()->query('SELECT @MySession1 AS MySession1, @MySession2 AS MySession2');
$rs=$stmt->fetch(PDO::FETCH_ASSOC);
echo("MySession1={$rs['MySession1']} MySession2={$rs['MySession2']}");

【问题讨论】:

  • 在没有 PDO 的情况下是否可以在控制台中工作?
  • @YourCommonSense 从未测试过,但我让它与 PDO 一起使用。正如我在编辑后的帖子中指出的那样,为什么它会起作用?
  • mysql 手册告诉我们: > 系统变量的@@var_name 语法支持与其他一些数据库系统兼容。
  • @hakre。但这似乎不起作用。我正在使用 MySQL 5.5.28。
  • 你也试过Mysql控制台吗?

标签: php mysql session pdo


【解决方案1】:

服务器变量和用户定义变量之间存在差异。用户定义变量的描述见http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 2015-10-10
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多