我正在使用Symfony2(2.3)并尝试将会话数据写入db。 我使用PDOSessionHandler和MSSQL 2012 db(sqlsrv作为驱动程序) 不幸的是我总是得到一个PDO错误:
'SQLSTATE[07002]: [Microsoft][SQL Server Native Client 11.0]COUNT field incorrect or syntax error'
PDOSessionHandler类准备的语句如下:
MERGE INTO session WITH (HOLDLOCK) USING (SELECT 1 AS dummy) AS src ON (session_id = :id) WHEN NOT MATCHED THEN INSERT (session_id, session_value, session_time) VALUES (:id, :data, :time) WHEN MATCHED THEN UPDATE SET session_value = :data, session_time = :time;
从我的观点来看,这似乎是不正确的,因为相同的参数被多次使用。这是根据pdo手册不允许的:(http://php.net/manual/en/pdo.prepare.php)
您必须为您希望的每个值包含唯一的参数标记 调用PDOStatement :: execute()时传入语句。您 不能多次使用同名的命名参数标记 准备好的声明,除非启用仿真模式。
这是一个symfony2错误还是我做错了什么?
感谢您的帮助!
答案 0 :(得分:2)
有2种解决方法:
:id2
,:data2
,:time2
您启用ATTR_EMULATE_PREPARES
:
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);