PHP mssql_query doppelte Anführungszeichen kann nicht verwendet werden
-
24-09-2019 - |
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 ..
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);