Проверить MySQL в PHP?

У меня есть Symfony 4 project, и я хочу хранить запросы mysql в виде строки в mysql database. Однако перед сохранением строк я хочу убедиться, что они действительны для mysql syntax. Есть способ сделать это? Спасибо!

Загляните в эту тему stackoverflow.com/questions/21557674/…

Gregoire Ducharme 26.03.2018 11:06

Возможный дубликат Проверка SQL-запроса с помощью PHP

iksajotien 26.03.2018 11:57

Вы хотите хранить запросы в той же базе данных, по которой хотите проверить синтаксис оператора?

Paul Campbell 26.03.2018 12:12

Какая цель?

axiac 26.03.2018 12:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
459
2

Ответы 2

Самый простой способ - запустить запрос в новой транзакции, а затем откатить его. SQL может быть сложным для проверки, особенно если вы планируете разрешить функции, специфичные для MySQL. Что, если в следующем выпуске MySQL появится новая функция? Написание и поддержка отдельной библиотеки проверки SQL кажется контрпродуктивным.

Почему бы не попробовать следующее:

  1. Создайте нового пользователя для выполнения этих запросов в вашей базе данных. Это позволит вам управлять безопасностью, например. позволяет использовать только оператор SELECT, поэтому никто не будет запускать DROP DATABASE.

  2. Запустите предоставленный пользователем оператор с использованием нового пользователя, созданного в пункте 1. Начните новую транзакцию с помощью START TRANSACTION, выполните предоставленный пользователем оператор и выполните откат с помощью ROLLBACK. Убедитесь, что SET autocommit=0 установлен в соответствии с 13.3.1 Синтаксис START TRANSACTION, COMMIT и ROLLBACK.

  3. Если предоставленный пользователем оператор выполняется без ошибок, он действителен. Вам не нужно читать все возвращенные строки в вашем PHP-коде.

Обязательно проверьте производительность, потому что выполнение некоторых операторов будет дорогостоящим. Эта функция может DOS вашего приложения.

Я бы, наверное, создать процедуру или функцию в базе. Вот для чего они нужны. Сохранение SQL в таблице только для запроса и последующего выполнения приводит только к избыточному круговому обходу между базой данных и приложением.

Я не тестировал, но он должен работать.

Используйте API базы данных, который вы уже используете в своем проекте, для подготовить операторы SQL, который вы хотите проверить, а затем отбросьте их; не выполняйте подготовленные операторы.

Например, используя PDO, используйте PDO::prepare(), чтобы попросить сервер подготовить оператор. Это возвращается объект PDOStatement в случае успеха (т.е. когда запрос правильный). Не вызывайте выполнять() для возвращенного оператора, просто отбросьте его (используя unset()).

PDO::prepare() возвращает FALSE или выдает исключение при ошибке, в зависимости от того, как настроен PDO обработка ошибок.

Другие вопросы по теме