@Dark_Dante

PDO::prepare или PDO::query?

Здравствуйте.
Подскажите, есть ли смысл использовать PD::prepare вместо PDO::query?
Слышал, что подготовленные запросы к базе предпочтительнее, так как на большом количестве однотипных запросов prepare дает прирост в скорости.
Правда ли что prepare не имеет смысла использовать для INSERT/UPDATE?
Что лучше использовать при биндинге входных значений- именованные (:param) или неименованные (?) псевдопеременные?
Дает ли использование подготовленных запросов полную защиту от sql-инъекций?
Заранее спасибо
  • Вопрос задан
  • 1675 просмотров
Пригласить эксперта
Ответы на вопрос 3
BuriK666
@BuriK666
Компьютерный псих
Подскажите, есть ли смысл использовать PD::prepare вместо PDO::query?
query не заменяет prepare

Слышал, что подготовленные запросы к базе предпочтительнее, так как на большом количестве однотипных запросов prepare дает прирост в скорости.
php.net/manual/ru/pdo.query.php
Если запрос будет запускаться многократно, для улучшения производительности приложения имеет смысл этот запрос один раз подготовить методом PDO::prepare(), а затем запускать на выполнение методом PDOStatement::execute() столько раз, сколько потребуется.

Правда ли что prepare не имеет смысла использовать для INSERT/UPDATE?
Только его и стоит использовать т.к. можно сделать биндинг параметров. (см.ниже)

Что лучше использовать при биндинге входных значений- именованные (:param) или неименованные (?) псевдопеременные?
Не имеет значения.

Дает ли использование подготовленных запросов полную защиту от sql-инъекций?
Да.
Ответ написан
edli007
@edli007
full stack, team lead
я конечно на мега спеца по SQL не претендую, но

PDO::prepare - подготавливает выражение на сервере, которое можно использовать многократно, т.е. 1 запрос или 100 с разными параметрами, уже не так важно.

PDO::query - подготавливает и использует выражение на один раз, для всех последующих запросов, даже однотипных, запрос будет строится с нуля.
Ответ написан
@Panda_Tamara
Разработчик проектов под UMI.CMS
Защита будет. Насколько полная вам смогут только люди, занимающиеся sql-инъекциями. В этом вопросе придется положиться на разрабов. Если исходить из экранирования, которое обеспечивается использованием плейсхолдеров - то да, по идее полное.

Есть ли смысл использовать PD::prepare вместо PDO::query? Давайте исходить из того, что в мануалах к расширению везде указано использование prepare, даже для однократных, не повторяющихся запросов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы