PDO - COUNT字段不正确或语法错误



我正在使用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 bug还是我做错了什么?

谢谢你的帮助!

有两种解决方法:

  1. 您可以将它们命名为:id2, :data2, :time2
  2. 启用ATTR_EMULATE_PREPARES:

    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
    

最新更新