Я перепроектирую веб-сайт, основанный на 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:
Спасибо за все хорошие советы, ребята. Это то, где я хотел бы отметить более одного ответа как "принятого" - много разных точек зрения. В конечном счете, я должен дать Рик его должное... без его ответа я бы блаженно ушел и сделал совершенно неправильную вещь даже после того, как после всех советов.: -)
Эмулированные подготовленные заявления!