Я создаю простой запрос в mySql, чтобы вставить некоторые значения из формы в мой db.
Мой вопрос прост, но в отношении разницы между связывающими переменными и их спецификацией в инструкции sql.
Переплет:
$query = "INSERT INTO test (name, lastName, price) VALUES (:name, :lastName, :price)"; $apply = $con -> prepare($query); $apply -> execute (array(':name'=>$name,':lastName'=>$lastName,':price=>$price'));
Типичные значения:
$query = "INSERT INTO test (name, lastName, price) VALUES ($name, $lastName, $price)"; Execute the query....
Действительно ли опция привязки рекомендуется даже для простых случаев, таких как выше? Почему это?
Благодаря!
Это необходимо, так как у вас есть пользовательские значения, и их можно легко манипулировать пользователем, нарушить структуру запроса и выполнить нежелательные команды.
Это не было бы необходимо, если данные обрабатывались только сервером. Но поскольку он использует данные из суперглобалов, которые пользователь может манипулировать (cookie, session, post, get, request …), это необходимо.
Хотя ваш запрос может быть безопасным без привязки (путем форматирования всех переменных вручную), использование готовых операторов для представления ваших данных в запросе действительно является единственным правильным способом.
Важность использования подготовленных заявлений часто недооценивается, поэтому я хотел бы уточнить реальные преимущества:
Потому что он более безопасен.
Если три переменные заполнены данными пользователя, вам не нужно санировать входные данные. Кроме того, если вам нужно повторить этот запрос несколько раз, общее выполнение должно быть быстрее.
И я лично считаю, что читать и отлаживать легче, когда вам придется читать ваши запросы через пару месяцев …