¿Cómo usar de forma segura los nombres de SQL reservados?

Estoy usando Cakephp 3 usando sqlserver como servidor de fuente de datos. Estoy seguro de que no hay ningún problema con la conexión de mi base de datos … como home.ctp me indica que estoy conectado a mi base de datos … y estoy usando el plugin de migraciones para crear mis tablas … parece que no hay problema para trabajar con estas herramientas pero después de hornear mi MVC, solo recibí una página llena de errores.

por ejemplo $ bin \ cake bake todas las pruebas

no hay errores que encontré y MVC están en su carpeta específica, testController.php, testTable, etc.

y en navegadores localhost: 8765 \ tests

pero todo lo que tengo es una página con errores diferentes. Estoy viendo

Error: SQLSTATE[42000]: [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near the keyword 'desc'.

SELECT * FROM (SELECT Tests.id AS [Tests__id], Tests.desc AS [Tests__desc], (ROW_NUMBER() OVER (ORDER BY (SELECT NULL))) AS [_cake_page_rownum_] FROM tests Tests) _cake_paging_ WHERE _cake_paging_._cake_page_rownum_ <= :c0

y más errores en el lado izquierdo.

Supongo que esto se debe a que los controladores con consultas incorrectas o consultas generadas por bake son solo para mysql. Solo quiero saber cómo lidiar con esto. ¿Hay algún ajuste que olvidé hacer? por favor aconséjame. Soy nuevo en Cakephp, y el inglés no es mi lengua materna, lo siento si no puedo explicar mi pregunta correctamente. gracias por adelantado.

Como ya mencionó Vishal Gajjar en los comentarios, está utilizando la palabra clave reservada desc para su nombre de columna, de ahí el error, no es fallas, es suya.

Para poder usar esas palabras reservadas, el nombre de la columna debe ser citado correctamente, sin embargo, CakePHP 3 ya no realiza cotizaciones automáticas por defecto, ya que es una operación costosa.

Si insiste en usar palabras reservadas, habilite las cotizaciones de identificadores a través de la opción quoteIdentifiers en su configuración de app.php , o habilítelas manualmente utilizando el autoQuoting() ( enableAutoQuoting() de CakePHP 3.4) del controlador de base de datos.

Ver también

  • Libro de cocina> Acceso a la base de datos y ORM> Principios básicos de la base de datos> Citas de identificadores
  • Libro de cocina> 3.x Guía de migración> Nueva guía de actualización de ORM> Citas de identificador desactivadas por defecto
  • API> \ Cake \ Database \ Driver :: autoQuoting ()
  • API> \ Cake \ Database \ Driver :: enableAutoQuoting ()

Puede usar este código antes de una consulta problemática:

 $this->Tests->connection()->driver()->autoQuoting(true); 

y cuando haya terminado, puede desactivar la cotización automática:

 $this->Tests->connection()->driver()->autoQuoting(false); 

Tan mal rendimiento sería solo en la consulta problemática.

Utilizar esta :

 SELECT * FROM (SELECT Tests.id AS [Tests__id], Tests.[desc] AS [Tests__desc], (ROW_NUMBER() OVER (ORDER BY (SELECT NULL))) AS [_cake_page_rownum_] FROM tests Tests) _cake_paging_ WHERE _cake_paging_._cake_page_rownum_ < = :c0 

Si usa una palabra clave, úselo entre corchetes cuadrados [ ]