在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);
它完美无缺
非常感谢你..
答案 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
并且你很高兴。