Я реинжиниринг веб-сайта, управляемого PHP, который использует минимальную базу данных. В оригинальной версии использовались «псевдо-подготовленные операторы» (функции PHP, которые выполняли кавычки и замену параметров) для предотвращения атак внедрения и отделения логики базы данных от логики страницы.
Казалось естественным заменить эти специальные функции объектом, который использует PDO и реально подготовленные операторы, но после прочтения их я не уверен. PDO по-прежнему кажется отличной идеей, но одна из основных выгодных сторон готовых заявлений - возможность их повторного использования… чего я никогда не сделаю. Вот мои настройки:
- Все утверждения тривиально просты. Большинство из них в форме
SELECT foo,bar FROM baz WHERE quux = ? ORDER BY bar LIMIT 1
. Самое сложное утверждение в лоте - это просто три таких выбора, соединенные вместе с UNION ALL
s.
- При каждом обращении к странице выполняется не более одного оператора и выполняется только один раз.
- Я нахожусь в хостинговой среде и поэтому опасаюсь захлопнуть их серверы, выполняя любые "стресс-тесты" лично.
Учитывая, что использование подготовленных заявлений как минимум удвоит количество обращений к базе данных, которые я совершаю, лучше ли мне их избегать? Могу ли я использовать PDO::MYSQL_ATTR_DIRECT_QUERY
, чтобы избежать накладных расходов на многократные поездки в базу данных, сохранив при этом преимущество параметризации и защиты от внедрения? Или бинарные вызовы, используемые подготовленным оператором API, работают достаточно хорошо по сравнению с выполнением неподготовленных запросов, и мне не стоит об этом беспокоиться?
EDIT:
Спасибо за все полезные советы, ребята. Это то место, где я хотел бы отметить несколько ответов как «принятые» - множество разных точек зрения. В конечном счете, однако, я должен отдать Рик его должное ... без его ответа я блаженно ушел бы и сделал бы полностью Неверную вещь даже после , следуя совету каждого. : -)
эмулировал готовые утверждения это!