PHP нельзя использовать двойные кавычки mssql_query - PullRequest
1 голос
/ 07 апреля 2010

В java-jdbc я могу легко запустить следующий SQL (ЗАМЕЧАНИЕ: двойные кавычки вокруг столбцов и имен таблиц)

Select 
       cus."customer_id" ,
       cus."organisation_or_person" ,
       cus."organisation_name" ,
       cus."first_name" ,
       cus."last_name" ,
       cus."date_became_customer" ,
       cus."other_customer_details"
From 
      "Contact_Management"."dbo"."Customers"    cus

Но тот же запрос в PHP выдает неверный синтаксис

"Предупреждение: mssql_query () [function.mssql-query]: message: неверный синтаксис рядом с 'customer_id' (серьезность 15)"

Но если удалить все двойные кавычки, запрос работаетнормально и без ошибок.

Запрос перенесен из Java-приложения, поэтому я хотел бы сохранить двойные кавычки и SQL как есть.Какие-нибудь альтернативные решения?

Спасибо, Nilesh

Volkerk - Решение (SET QUOTED_IDENTIFIER ON)

Я сделал следующее

    $sql = <<<EOD
Select 
       cus."customer_id" ,
       cus."organisation_or_person" ,
       cus."organisation_name" ,
       cus."first_name" ,
       cus."last_name" ,
       cus."date_became_customer" ,
       cus."other_customer_details"
From 
      "Contact_Management"."dbo"."Customers"    cus
EOD;

$db->Execute('SET QUOTED_IDENTIFIER ON');
    $rs = $db->Execute($sql); 

И это сработало идеально

Спасибо большое ..

Ответы [ 3 ]

0 голосов
/ 07 апреля 2010

Как насчет этого?

$query ='Select 
   cus."customer_id" ,
   cus."organisation_or_person" ,
   cus."organisation_name" ,
   cus."first_name" ,
   cus."last_name" ,
   cus."date_became_customer" ,
   cus."other_customer_details"
From 
  "Contact_Management"."dbo"."Customers"    cus';

$query = str_replace('"', '', $query);
0 голосов
/ 07 апреля 2010

QUOTED_IDENTIFIER, вероятно, установлено на OFF.

http://msdn.microsoft.com/en-us/library/ms174393.aspx говорит:

SET QUOTED_IDENTIFIER (Transact-SQL)
[...]
Когда SET QUOTED_IDENTIFIER включен, идентификаторы могут быть разделены двойными кавычками, а литералы должны быть разделены одинарными кавычками. Если для параметра SET QUOTED_IDENTIFIER установлено значение OFF, идентификаторы не могут заключаться в кавычки и должны соответствовать всем правилам Transact-SQL для идентификаторов. Для получения дополнительной информации см. Идентификаторы
[...]
Драйвер ODBC для собственного клиента SQL Server и поставщик OLE DB для собственного клиента SQL Server для SQL Server автоматически устанавливают для QUOTED_IDENTIFIER значение ON при подключении. Это можно настроить в источниках данных ODBC, в атрибутах соединения ODBC или в свойствах соединения OLE DB. По умолчанию для SET QUOTED_IDENTIFIER установлено значение OFF для соединений из приложений DB-Library.

установите его на On и все готово.

0 голосов
/ 07 апреля 2010

Это не совсем так, как есть, но вы можете заменить двойные кавычки " обратными чертами:

Select 
       cus.`customer_id` ,
       cus.`organisation_or_person` ,
       cus.`organisation_name` ,
       cus.`first_name` ,
       cus.`last_name` ,
       cus.`date_became_customer` ,
       cus.`other_customer_details`
From 
      `Contact_Management`.`dbo`.`Customers`    cus
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...