Доктрина PHP с MSSQL: неправильный синтаксис рядом с ':' - PullRequest
0 голосов
/ 03 января 2019

Я работаю над проектом Symfony 4 с сервером MSSQL (не оптимально, но корпоративное решение).

У нас возникла проблема при использовании именованных переменных.

[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Incorrect syntax near ':'.

ex:

$query->where("status = :status");

мы применяем значения с помощью setParameter ()

$query->setParameter('status', $status);

Мы получаем синтаксическую ошибку.Я попытался сохранить кавычки с самой переменной, чтобы убедиться, что это не так, однако он возвращает ту же ошибку.Если я заменю именованные переменные на ex: 'ACTIVE', то все будет работать как положено.Я также распечатал sql с помощью getSQL () и проверил это непосредственно в SQL Management Studio, это тоже отлично работает.

Отладка оператора является сложной задачей, и я рассматриваю вопрос о том, нужно ли нам создавать класс-оболочку подключения и манипулировать им для поддержки MSSQL, но, прежде чем перейти к этому расширению, возможно, у некоторых из вас есть идея?

Полный ответ об ошибке:

An exception occurred while executing 'SELECT U.CIID AS ciid, U.USERID as userid, U.FIRSTNAME as firstname, U.MIDDLENAME as middlename, U.LASTNAME as lastname, ACI.emailid as email, U.JOBTITLE as position, ACI.landline as phone_local, ACI.mobile as phone_mobile, P.ATTRIBUTE_1801 as phone_cisco FROM SDUSER U INNER JOIN AaaUser AU ON U.USERID=AU.USER_ID INNER JOIN People P ON U.CIID=P.CIID INNER JOIN AaaUserContactInfo AUCI ON AU.USER_ID=AUCI.USER_ID INNER JOIN AaaContactInfo ACI ON AUCI.CONTACTINFO_ID=ACI.CONTACTINFO_ID WHERE U.STATUS=:status':

SQLSTATE [42000, 102]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Incorrect syntax near ':'.
SQLSTATE [42000, 8180]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Statement(s) could not be prepared. (500 Internal Server Error)

Как вы можете видеть, похоже, что именованные параметры заставляют заключать в кавычки весь sql, который mssql не может принять.

MSSQL 2012 PHP 7.1.3 Symfony 4 Doctrine 2

1 Ответ

0 голосов
/ 03 января 2019

Может быть, вам нужно поставить этот код ниже:

ini_set('mssql.charset', 'UTF-8');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...