Frage

In Java-jdbc, ich kann die folgende SQL leicht laufen (man beachte die doppelten Anführungszeichen um Spalten und Tabellennamen)

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

Aber die gleiche Abfrage in PHP-Fehler heraus sagen ungültige Syntax

"Warnung: mssql_query () [function.mssql-query]: Meldung:. Falsche Syntax in der Nähe von 'customer_id' (Schweregrad 15)"

Aber wenn entfernen Sie alle doppelten Anführungszeichen, die Abfrage funktioniert gut und keine Fehler.

Die Abfrage wird von einer Java-Anwendung portiert, so würde ich die doppelten Anführungszeichen halten mag und die SQL, wie es ist. Alle mögliche alternative Lösungen?

Danke Nilesh

VolkerK - Lösung (SET QUOTED_IDENTIFIER ON)

Ich habe die folgenden

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

Und es funktionierte perfekt

Vielen Dank ..

War es hilfreich?

Lösung

QUOTED_IDENTIFIER ist wahrscheinlich auf OFF.

http://msdn.microsoft.com/en-us/library /ms174393.aspx sagt:

SET QUOTED_IDENTIFIER (Transact-SQL)
[...]
Wenn SET QUOTED_IDENTIFIER AN ist, Bezeichner können durch doppelte Anführungszeichen begrenzt werden, und Literale müssen durch einfache Anführungszeichen begrenzt werden. Wenn SET QUOTED_IDENTIFIER OFF ist, Bezeichner nicht angegeben werden und müssen alle Transact-SQL-Regeln für Bezeichner entsprechen. Weitere Informationen finden Sie unter Identifiers
[...]
Der SQL Server Native Client ODBC-Treiber und SQL Server Native Client OLE DB-Provider für SQL Server automatisch Satz QUOTED_IDENTIFIER auf ON, wenn anschließen. Dies kann in ODBC-Datenquellen so konfiguriert werden, in ODBC-Verbindungsattribut oder OLE DB Verbindungseigenschaften. Die Standardeinstellung für SET QUOTED_IDENTIFIER OFF für Verbindungen von DB-Library-Anwendungen.

setzen Sie ihn auf On und du bist gut zu gehen.

Andere Tipps

Es ist nicht genau, wie sie ist, aber man konnte die doppelten Anführungszeichen " mit Backticks ersetzen:

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

Was ist das?

$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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top