#php #mysql #ajax #pdo
#php #mysql #ajax #pdo
Вопрос:
Если я хотел бы создать ajax-поиск (пользователь заполняет элементы формы, при любом обновлении элементов формы результаты поиска обновляются в режиме реального времени.)
Возможно ли создать постоянное (подготовленное) PDO-соединение, для которого требуется привязка / выполнение только новых переменных, отправляемых через ajax?
Есть ли другой разумный способ сделать это?
Редактировать: Просто для ясности и, возможно, более конкретно: то, что я ищу, — это постоянный подготовленный оператор для всех подключений.
Комментарии:
1. Вы уверены, что хранимая процедура не подошла бы для этого лучше?
Ответ №1:
Вы можете установить постоянное соединение, используя:
http://php.net/manual/en/pdo.connections.php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
PDO::ATTR_PERSISTENT => true
));
Таким образом, если вам нужно повторно подключиться по новому запросу, PDO будет использовать соединение из пула, а не создавать новое. Если вы используете подготовленные инструкции с prepare()
и bindParam()
, запрос будет скомпилирован на стороне базы данных и выполняться быстрее, чем обычный запрос.
Некоторые ссылки на кэширование:
http://www.snipe.net/2009/03/quick-and-dirty-php-caching/
Комментарии:
1. Я понимаю, что они корректны по отдельности. Подготовленные инструкции будут скомпилированы на стороне базы данных и выполняться быстрее — И постоянные соединения будут пытаться использовать то же соединение, что и в прошлый раз… однако я не уверен в том, как они будут работать вместе. У меня такое чувство, что только этих основных двух частей недостаточно для достижения того, что я ищу, то есть постоянного подготовленного оператора между соединениями.
2. Database engine скомпилирует и кэширует переданный запрос между соединениями. Но не слишком ли вы пытаетесь оптимизировать?
3. Это для системы тегов, которая может начать интенсивно работать с реляционной базой данных по мере увеличения наборов данных (по крайней мере, так я понимаю).) С поиском в стиле AJAX это добавит дополнительную нагрузку, поэтому я пытаюсь сократить вычисления, где это возможно.
4. Для меня это неправильный путь. Оптимизация времени подключения не даст вам никаких преимуществ. Результаты запроса кеша в PHP, это правильный путь.
5. О » Если вы используете подготовленные инструкции с помощью prepare() и bindParam (), запрос будет скомпилирован на стороне базы данных и выполняться быстрее, чем обычный запрос. » — взгляните на bugs.php.net/bug.php?id=54638 , в нем говорится, что » Драйвер PDO_MySQL по умолчанию использует emulate_prepare равным 1, что заставляет драйвер эмулировать все подготовленные запросы. «, поэтому компиляция или кэширование подготовленных запросов на стороне сервера просто не будут выполняться по умолчанию.
Ответ №2:
Я полагаю, вы говорите здесь о подготовленных сообщениях, а не о «соединениях».
Нет способа сохранить один и тот же подготовленный statment между вызовами (ajax или нет)
Альтернативой было бы сохранить переменные во временной таблице и отправить реальный запрос в конце процесса…