2010-04-06 2 views
1

을 사용할 수 없습니다, 난 쉽게 PHP 오류에PHP mssql_query 따옴표는 자바 JDBC에서

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 

그러나 동일한 쿼리 (이중 컬럼과 테이블 이름 따옴표 주) 다음과 같은 SQL을 실행할 수 있습니다 ": mssql_query() [function.mssql-쿼리] : 메시지 :. 'CUSTOMER_ID'근처의 구문이 잘못되었습니다 (심각도 15) 경고"

그러나 모든 따옴표를 제거하면 쿼리 잘못된 구문을

말을 알아 공장 좋고 오류가 없습니다.

쿼리가 Java 응용 프로그램에서 이식되므로 이중 따옴표와 SQL을 그대로 유지하고 싶습니다. 다른 대안? 솔루션 (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); 

그리고이 일을 완벽

당신에게 너무 감사 않았다 -

Volkerk 당신에게 Nilesh 감사 ..

답변

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 용 Native Client OLE DB 공급자는 연결할 때 자동으로 QUOTED_IDENTIFIER를 ON으로 설정합니다. ODBC 데이터 소스, ODBC 연결 속성 또는 OLE DB 연결 속성에서 구성 할 수 있습니다. SET의 QUOTED_IDENTIFIER에 대한 기본값은 DB-Library 응용 프로그램에서 연결을 OFF합니다.

On으로 설정하면 가야합니다.

+0

동일한 쿼리가 Java에서 동일한 인스턴스에 대해 정상적으로 작동하므로 SQL 서버에 문제가 있다고 생각하지 않습니다. 나는 그것이 PHP 라이브러리 문제라고 생각한다. – Nilesh

+0

이것은 서버 전체 설정이 아닙니다. 그래서 귀하의 자바 애플 리케이션은 다른 설정을 사용할 수 있습니다. – VolkerK

+0

안녕하세요, Volkerk, 맞습니다. 문제가 해결되었습니다. 테스트하지 않고 회신을 드려 죄송합니다. 내가 한 다음 \t $의 SQL = <<< EOD 선택 기분이야. "CUSTOMER_ID" 기분이야. "organisation_or_person" 기분이야. "ORGANISATION_NAME" 기분이야. "FIRST_NAME" 기분이야. " last_name ", cus."date_became_customer ", cus."other_customer_details " "Contact_Management "."dbo "."고객 "cus EOD; $ db-> 실행 ('SET QUOTED_IDENTIFIER ON'); $ rs = $ db-> Execute ($ sql); 완벽하게 작동했습니다. 고맙습니다. – Nilesh

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 
+0

Dav, backticks도 작동하지 않습니다. 다음 오류가 발생합니다. 경고 : mssql_query() [function.mssql-query] : 메시지 : '' '근처의 구문이 잘못되었습니다. – Nilesh

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

나는 이것을 사용할 수는 있지만 단어 사이에 공백이있는 열 이름이 있으면이 단어가 깨질 것입니다. 예를 들어 "고객 ID"는 고객과 고객 사이에 공백이 있습니다. ID – Nilesh

관련 문제