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