1

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]: メッセージ: 'customer_id' 付近の構文が正しくありません。(重大度 15)"

ただし、すべての二重引用符を削除すると、クエリは正常に機能し、エラーは発生しません。

クエリは Java アプリケーションから移植されているので、二重引用符と SQL はそのままにしておきたいと思います。代替ソリューションはありますか?

ありがとうニレッシュ

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); 

そして、それは完璧に機能しました

どうもありがとう..

4

3 に答える 3

0

"正確には現状のままではありませんが、二重引用符をバッククォートに置き換えることができます。

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
于 2010-04-06T22:16:52.977 に答える
0

これはどうですか?

$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);
于 2010-04-06T22:20:08.763 に答える
0

QUOTED_IDENTIFIERおそらくオフに設定されています。

http://msdn.microsoft.com/en-us/library/ms174393.aspx言います:

SET QUOTED_IDENTIFIER (Transact-SQL)
[...]
SET QUOTED_IDENTIFIER が ON の場合、識別子は二重引用符で区切ることができ、リテラルは一重引用符で区切る必要があります。SET QUOTED_IDENTIFIER が OFF の場合、識別子を引用符で囲むことはできず、識別子に関するすべての Transact-SQL 規則に従う必要があります。詳細については、「識別子
」を参照してください [...]
SQL Server Native Client ODBC ドライバーおよび SQL Server Native Client OLE DB Provider for SQL Server は、接続時に QUOTED_IDENTIFIER を自動的に ON に設定します。これは、ODBC データ ソース、ODBC 接続属性、または OLE DB 接続プロパティで構成できます。DB-Library アプリケーションからの接続の場合、SET QUOTED_IDENTIFIER のデフォルトは OFF です。

に設定すると、準備On完了です。

于 2010-04-06T22:28:25.997 に答える