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可能设置为OFF。

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 的 SQL Server Native Client OLE DB 提供程序在连接时自动将 QUOTED_IDENTIFIER 设置为 ON。这可以在 ODBC 数据源、ODBC 连接属性或 OLE DB 连接属性中进行配置。对于来自 DB-Library 应用程序的连接,SET QUOTED_IDENTIFIER 的默认值为 OFF。

设置它On,你就可以开始了。

于 2010-04-06T22:28:25.997 回答