PHP mssql_query双引号不能使用

时间:2010-04-06 22:12:47

标签: php sql-server-2005 double-quotes

在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 :(得分: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

答案 1 :(得分: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);

答案 2 :(得分: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规则。有关详细信息,请参阅Identifiers
[...]
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并且你很高兴。