Как безопасно использовать зарезервированные имена SQL?
Я использую Cakephp 3, используя sqlserver в качестве источника данных. Я уверен, что нет никаких проблем с подключением к базе данных. Поскольку home.ctp запрашивает, что я подключен к моей базе данных .. и я также использую плагин migrations для создания моих таблиц .. кажется, что нет проблем с работой с эти инструменты. но после того, как я испекла свой MVC, я только получил страницу с ошибками.
например, $ bin \ cake испечь все тесты
ошибок нет, и MVC находятся в его конкретной папке, testController.php, testTable и т. д.
- Примечание. Преобразование массива в строку в
- Как добавить пользователя AzureAD к SQL Server для проверки подлинности Windows
- Как конкатенировать текст из нескольких строк в одну текстовую строку на SQL-сервере?
- Журнал ошибок служб компонентов - SQL Server Distributed Replay Client
- Как создать резервную копию Windows 7 Live Photo Gallery?
и в браузерах localhost: 8765 \ tests
но все, что у меня есть, это страница с разными ошибками.
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
и больше ошибок на левой стороне.
Я предполагаю, что это из-за controllerов с неправильными запросами или запросами, сгенерированными с помощью bake, только для mysql. Я просто хочу знать, как с этим бороться. есть ли настройки, которые я забыл сделать? пожалуйста посоветуй. Я новичок в Cakephp, а английский – не мой родной язык, извините, если я не могу правильно объяснить свой вопрос. заранее спасибо.
- SQL Server - Столбец "недействителен в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY"
- Что такое «с (nolock)» в SQL Server?
- Использование Excel VBA для запуска SQL-запроса
- Экспорт данных SQL-запроса в Excel
- Почему мое соединение ODBC не работает при запуске нагрузки SSIS в Visual Studio, но не при запуске одного и того же пакета с помощью утилиты Execute Package Utility
- Менее сложный интерфейс для SQL Server
- Драйвер не смог установить безопасное соединение с SQL Server с использованием шифрования Secure Sockets Layer (SSL)
- Как получить расширение SQLSRV для работы с PHP, поскольку MSSQL устарел?
Как уже упоминалось в комментариях к Vishal Gajjar, вы используете зарезервированное ключевое слово desc
для своего имени столбца, следовательно, ошибка, это не ошибка пека, это ваша.
Чтобы иметь возможность использовать такие зарезервированные слова, имя столбца должно быть правильно указано, однако CakePHP 3 больше не автокопирует по умолчанию, поскольку это дорогостоящая операция.
Если вы настаиваете на использовании зарезервированных слов, включите quoteIdentifiers
идентификатора с помощью параметра app.php
конфигурации app.php
или включите его вручную, используя метод autoQuoting()
( enableAutoQuoting()
как CakePHP 3.4) для драйвера DB.
Смотрите также
- Cookbook> Доступ к базе данных и ORM> Основы баз данных> Идентификатор Quoting
- Поваренная книга> Руководство по перенастройке 3.x> Новое руководство по обновлению ORM> Идентификатор с котировкой отключен по умолчанию
- API> \ Cake \ Database \ Driver :: autoQuoting ()
- API> \ Cake \ Database \ Driver :: enableAutoQuoting ()
Вы можете использовать этот код перед проблемным запросом:
$this->Tests->connection()->driver()->autoQuoting(true);
и когда вы закончите, вы можете отключить автоматическое цитирование:
$this->Tests->connection()->driver()->autoQuoting(false);
Настолько плохая производительность была бы только при проблемном запросе.
Использовать это :
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
Если вы используете ключевое слово, используйте его в квадратных скобках [ ]