2013-04-07 457 views
0

我使用PHP的PDO來訪問我的MySQL數據庫。我通常爲我的連接創建一個單例類。我想在啓動連接時設置一個MySQL會話變量,之後再設置。請參閱下文,瞭解我設置MySession1和MySession2失敗的嘗試。我怎樣才能做到這一點?謝謝使用PDO設置MySQL會話變量()

編輯。只是發現它的作品,如果你只使用一個@。我最初使用兩個at-signs @@,我認爲需要文檔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']}"); 
+0

沒有PDO,只是在控制檯中工作嗎? – 2013-04-07 17:50:50

+0

@YourCommonSense從來沒有測試過,但我得到它與PDO的工作。正如我在我編輯的文章中指出的那樣,它爲什麼會起作用? – user1032531 2013-04-07 17:52:45

+0

mysql手冊說明:>爲了兼容其他數據庫系統,支持系統變量的@@ var_name語法。 – hakre 2013-04-07 18:04:43

回答