comillas dobles PHP mssql_query no se pueden utilizar
-
24-09-2019 - |
Pregunta
En Java JDBC, que puede fácilmente ejecutar el siguiente código SQL (NOTA las comillas dobles columnas y los nombres de tabla)
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
Sin embargo, la misma consulta en los errores de PHP sin decir inválida sintaxis
"Advertencia: mssql_query () [function.mssql-query]: mensaje:. Sintaxis incorrecta cerca 'customer_id' (severidad 15)"
Sin embargo, si se retiran todos los comillas dobles, la consulta funciona bien y sin errores.
La consulta es portado desde una aplicación Java así que me gustaría mantener las comillas dobles y el SQL tal como es. Cualquier solución alternativa?
Gracias Nilesh
Volkerk - Solución (SET QUOTED_IDENTIFIER ON)
hice lo siguiente
$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);
Y funcionó perfecto
Muchas gracias ..
Solución
QUOTED_IDENTIFIER
probablemente está establecido en OFF.
http://msdn.microsoft.com/en-us/library /ms174393.aspx dice:
SET QUOTED_IDENTIFIER (Transact-SQL)
[...]
Cuando SET QUOTED_IDENTIFIER es ON, los identificadores pueden estar delimitados por comillas dobles, y literales deben estar delimitados por comillas simples. Cuando SET QUOTED_IDENTIFIER es OFF, los identificadores no puedo ser citado y debe cumplir con todas las normas de Transact-SQL de los identificadores. Para obtener más información, consulte Identificadores
[...]
El controlador ODBC de SQL Server Native Client y el proveedor de SQL Server Native Client OLE DB para SQL Server establece automáticamente QUOTED_IDENTIFIER en ON cuando se conecta. Esto se puede configurar en las fuentes de datos ODBC, en los atributos de conexión ODBC, o propiedades de conexión OLE DB. El valor predeterminado de SET QUOTED_IDENTIFIER es OFF para conexiones desde aplicaciones de DB-Library.
configurarlo para On
y ya está bueno para ir.
Otros consejos
No es exactamente como está, pero que podría reemplazar las comillas dobles "
con acentos abiertos:
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
¿Qué hay de esto?
$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);