Я рассматривал предложение PHP PDO's prepared statements prevents SQL injection
.
- Как php PDO (подготовленные заявления PDO) предотвращают инъекцию sql?
- Каковы другие плюсы и минусы использования PDO (подготовленные заявления PDO)?
- Использует ли PDO (подготовленные заявления PDO) снижение эффективности?
Я прочитал следующее: подготовлены ли PDO заявления, достаточные для предотвращения SQL-инъекций? Но данные там не совсем ясны.
Ну, на первый взгляд ваш вопрос выглядит более сложным, и на него можно ответить только одной ссылкой
Как подготовленные заявления php pdo предотвращают инъекцию sql?
Как подготовленные заявления защищают от атак SQL-инъекций?
Каковы другие плюсы и минусы использования PDO?
Самый интересный вопрос.
Наибольшим недостатком PDO является: он продается и размножается серебряная пуля, другой кумир для поклонения.
Хотя без понимания это ничего не принесет, как и любой другой инструмент.
PDO имеет некоторые ключевые функции, такие как
Использует ли PDO эффективность?
Опять же, это не PDO, а подготовленные заявления, которые снижают эффективность. Это зависит от латентности сети между сервером db и вашим приложением, но вы можете считать его незначительным для большинства случаев реального мира.
Основной метод PDO, используемый для предотвращения внедрения SQL, заключается в подготовке операторов с параметрами в запросе и предоставлении значений при выполнении запроса. PDO автоматически позаботится об ускорении кавычек и других символов в значениях. Пока вы делаете это в каждом запросе и не ставите значения непосредственно в запрос, вы защищены от SQL-инъекции. Ответы на вопрос, который вы связали, показывают, как это делается.
Одним из основных преимуществ использования PDO или любого DBA является то, что PDO инкапсулирует низкоуровневую связь к фактической БД, оставляя вас только для обработки фактической логики запроса. Он позволяет с минимальными усилиями изменять используемую вами базу данных (MySQL, Postgre и т. Д.). Это также упрощает работу с установками master / slave и считывает реплики.
В большинстве случаев использование PDO будет только незначительно медленнее, чем прямые вызовы функций. В любом случае небольшое снижение производительности стоит того.
Вместо того, чтобы раздражать вопрос об этом вопросе, я дам вам ответ на реальный вопрос: при prepare
запроса в основном выполняется mysql_real_esape_string
или какой-то эквивалент на каждом токене (представленный вопросительным знаком или :value
). Это упрощает проверку того, что все переменные данные правильно экранированы. Это не мешает всем проблемам безопасности (например, %
и _
не экранируются, что может повлиять на предложения LIKE
).
Насколько я знаю, нет никаких недостатков в использовании PDO
. Я полагаю, что con – это то, что он не поддерживает все известные БД. Существуют ограниченные драйверы, но это только конфликт, если вы хотите использовать PDO для базы данных, которую он не может поддерживать. Плюсы? Ну, вы получаете большую гибкость из PDO, особенно если вы создаете для него оболочку (на всякий случай вам нужно было переключать DBA), и поскольку она скомпилирована C, она, предположительно, быстрее, чем другие функции php (см. Ниже). Это также избавляет вас от необходимости писать собственные методы для подготовки запросов и т. Д.
Уменьшить эффективность по сравнению с чем? Какая эффективность? Эффективность программирования или скорость выполнения? Насколько я понимаю, PDO скомпилирован, поэтому его использование должно быть быстрее, чем создание собственной оболочки DB для подготовки запросов и т. Д. Если это действительно вызывает беспокойство, вы можете сравнить эту разницу, но я предлагаю вам сначала посмотреть на замедление в первую очередь.