PDO - неверное поле COUNT или синтаксическая ошибка

Я использую Symfony2 (2.3) и пытаюсь записать данные сеанса в БД. Я использую PDOSessionHandler с базой данных MSSQL 2012 (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 или я что-то не так делаю?

Спасибо за вашу помощь!


person user1915746    schedule 08.08.2014    source источник


Ответы (1)


Есть 2 обходных пути:

  1. Вы либо называете их по-разному :id2, :data2, :time2
  2. Вы включаете ATTR_EMULATE_PREPARES:

    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
    
person meda    schedule 08.08.2014