Кеширование PDO подготовленных заявлений - PullRequest
1 голос
/ 20 ноября 2011

Есть ли смысл сохранять подготовленные операторы PDO для повторного использования в сеансе?

Я создаю сайт, который использует полнотекстовые запросы MySQL, которые я собираю в своем PHP, например

SELECT * FROM table 
WHERE MATCH (title) AGAINST ($search_string IN BOOLEAN MODE) AND 
      MATCH (keywords) AGAINST ($keywords IN BOOLEAN MODE)
ORDER BY $order_by $asc_desc

Кажется, что когда я подготавливаю и выполняю его со связанными параметрами, выполнение этого вида запроса занимает гораздо больше времени, чем когда я просто подготавливаю и выполняю строку запроса со включенными значениями.Но мне нужно использовать подготовленные операторы, чтобы предотвратить риск внедрения SQL.

В любом сеансе я, скорее всего, выполнил бы один и тот же запрос несколько раз с разными значениями параметров.Имеет ли смысл сохранять объект PDOStatement после его создания (например, в сеансе)?Если так, что было бы лучшим способом сделать это?Будет ли хорошей практикой сохранять каждый подготовленный оператор в ассоциативном массиве по мере его создания со строкой SQL-запроса в качестве ключа для каждого?


При дальнейшем чтении я обнаружил, что нельзя использовать связанные параметрыдля ORDER BY и ASC / DESC часть заявления.Когда я заменяю их фиксированными значениями, производительность улучшается.

Ответы [ 2 ]

3 голосов
/ 20 ноября 2011

Нет смысла хранить оператор подготовки в сеансе для многократного использования,
дорогая стоимость - на самом выполнении запроса.

0 голосов
/ 20 ноября 2011

Если данные, которые вы получаете, постоянно изменяются, то кэширование набора результатов может перестать быть действительным вскоре после их получения.

Однако, если ваши данные выглядят статичными:

session_start();
$_SESSION['cachedResultSet'] = $fetchedResultset;
echo $_SESSION['cachedResultSet'][0][0]; 
# above statement `echo ...` depends on how your result is, be it an array or object

Я думаю, что в некоторой степени было бы приемлемо хранить наборы результатов в переменных сеанса, но, возможно, это будет зависеть (извините за избыточность) от быстрых изменений данных или от того, как часто вы получаете этот конкретный набор результатов и т. Д. ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...