Насколько я знаю, использование prepared statement уже само по себе гарантированная защита от SQL инъекций (т.к. данные посылаются на сервер отдельно от запроса и сервер делает все необходимое, что бы экранировать данные).
Однако, использование prepared намного более объемное по коду чем использование PDO::query для единичных запросов. Сравним:
$stmt = $DBH->prepare("SOME SQL QUERY");
$stmt->execute($array_with_data);
$result = fetchAll();
Или даже так:
$stmt = $DBH->prepare("SOME SQL QUERY");
$stmt->bindParam('param1', $param1);
$stmt->bindParam('param2', $param2);
$stmt->bindParam('param3', $param3);
$stmt->execute();
$result = fetchAll();
Сравним с тем же самым, что получается при использовании просто PDO::query:
$result = $DBH->query("SOME SQL QUERY WITH DATA")->fetchAll();
И ВСЕ :)
Кроме того, приготовленные запросы сложнее отлаживать, ибо финального запроса как такового просто не существует. А для обычных запросов всегда можно их вывести и посмотреть что там не так (где там кавычка пропущена, запятая и т.д.).
Однако, я так понимаю, второй вариант никак не защищает от инъекций, если данные в запросе заранее не были правильно экранированы.
Вопросы:
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Кто сталкивался или знает есть ли на PHP реализации торговли, управление остатками и тому подобное? Есть ли вообще в природе подобные проекты?...