sql server - not - ¿Cómo usar de forma segura los nombres SQL reservados?
like sql php (3)
Como ya lo mencionó Vishal Gajjar en los comentarios, está utilizando la palabra clave reservada
desc
para el nombre de su columna, de ahí el error, no es culpa suya, es suya.
Para poder usar esas palabras reservadas, el nombre de la columna debe ser citado correctamente, sin embargo, CakePHP 3 ya no se cita automáticamente por defecto, ya que es una operación costosa.
Si insiste en usar palabras reservadas, habilite la cita del identificador a través de la opción
quoteIdentifiers
en su configuración
app.php
, o habilítela manualmente usando el
autoQuoting()
(
enableAutoQuoting()
partir de CakePHP 3.4) del controlador DB.
Ver también
- Libro de cocina> Acceso a la base de datos y ORM> Conceptos básicos de la base de datos> Cita del identificador
- Libro de cocina> 3.x Guía de migración> Nueva guía de actualización de ORM> Cita de identificador deshabilitada por defecto
- API> / Cake / Database / Driver :: autoQuoting ()
- API> / Cake / Database / Driver :: enableAutoQuoting ()
Estoy usando Cakephp 3 usando sqlserver como servidor de origen 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 también estoy usando el complemento de migraciones para crear mis tablas ... parece que no hay ningún problema al trabajar con Estas herramientas. pero después de hornear mi MVC, solo recibí una página llena de errores.
por ejemplo $ bin / cake hornear todas las pruebas
no encontré ningún error y MVC está en su carpeta específica, testController.php, testTable, etc.
y en los navegadores localhost: 8765 / tests
pero todo lo que tengo es una página de diferentes errores. 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 una configuración 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.
Puede usar este código antes de una consulta problemática:
$this->Tests->connection()->driver()->autoQuoting(true);
y cuando haya terminado, puede desactivar el presupuesto automático:
$this->Tests->connection()->driver()->autoQuoting(false);
Por lo tanto, el mal rendimiento sería solo en consultas problemáticas.
Utilizar este :
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, úsela entre corchetes
[ ]