В настоящее время "Подготовленные утверждения" кажутся единственными, кто рекомендует отправлять запросы в базу данных. Я даже вижу рекомендации по использованию подготовленных инструкций для хранимых процедур. Однако для выполнения дополнительных запросов, необходимых для запроса, - и короткого времени, которое они проводят, я убежден, что они полезны только для строки запросов INSERT/UPDATE.
Я надеюсь, что кто-то может исправить меня по этому поводу, но это похоже на повторение всего "Таблицы - это зло". Таблицы являются только злыми, если они используются для макетов, а не табличные данные. Использование DIV для табличных данных является нарушением стиля WC3.
Как и мудрый, простой SQL (или тот, который генерируется из AR), кажется, намного полезнее для 80% используемых запросов, которые на большинстве сайтов представляют собой один SELECT, который не повторяется снова, что загружает страницу (я говорю о скриптовых языках, таких как PHP здесь). Почему я должен сделать свою избыточную налоговую БД, подготовить выражение о том, что она должна запускаться только один раз перед удалением?
MySQL:
Подготовленный отчет специфичен для сеанс, в котором он был создан. Если вы прекратите сеанс без освобождение ранее подготовленного, сервер освобождает его автоматически.
Итак, в конце вашего script PHP автоматически закроет соединение, и вы потеряете подготовленный оператор только для того, чтобы ваш script заново создал его при следующем загрузке.
Я что-то упустил или это просто способ снизить производительность?
: UPDATE:
Мне стало ясно, что я предполагаю новые подключения для каждого script. Я бы предположил, что если используется постоянное соединение, эти проблемы исчезнут. Правильно ли это?
: UPDATE2:
Кажется, что даже если постоянные соединения - это решение - они не очень хороший вариант для большей части Интернета - особенно если вы используете сделки. Поэтому я вернусь к квадрату, у которого есть не более чем контрольные показатели ниже, чтобы продолжить...
: Update3:
Большинство людей просто повторяют фразу "подготовленные заявления защищают от SQL-инъекции", которая не полностью объясняет проблему. Предоставленный метод "escape" для каждой библиотеки БД также защищает от SQL-инъекции. Но это более того:
При отправке запроса обычным способом, клиент (script) преобразует данные в строки, которые затем передаются сервер БД. Затем сервер БД использует Мощность ЦП для преобразования их обратно в правильный двоичный тип данных. двигатель базы данных затем анализирует и ищет синтаксические ошибки.
При использовании подготовленных операторов... данные отправляются в двоичной форме, который экономит использование CPU-CPU, и делает передачу данных более эффективный. Очевидно, что это также уменьшить использование полосы пропускания, если клиент не находится совместно с сервером БД.
... Типы переменных предопределены, и, следовательно, MySQL учитывает эти персонажи, и им это не нужно чтобы ускользнуть.
Спасибо OIS за то, что он окончательно дал мне ссылку на эту проблему.