我正在使用PHP的PDO来访问我的MySQL数据库。我通常为我的连接创建一个单例类。我想在启动连接时设置MySQL会话变量,稍后也是如此。我在尝试设置MySession1和MySession2时失败了。我怎样才能做到这一点?感谢
EDIT。刚刚发现如果你只使用一个@
就可以了。我最初使用两个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 :(得分:0)
服务器变量和用户定义的变量之间存在差异。有关用户定义变量的说明,请参阅http://dev.mysql.com/doc/refman/5.0/en/user-variables.html。