Sql запрашивает привязывающие переменные и указывает их

Я создаю простой запрос в 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 …), это необходимо.

Хотя ваш запрос может быть безопасным без привязки (путем форматирования всех переменных вручную), использование готовых операторов для представления ваших данных в запросе действительно является единственным правильным способом.

Важность использования подготовленных заявлений часто недооценивается, поэтому я хотел бы уточнить реальные преимущества:

  • подготовленный оператор делает правильное форматирование (или обработку) неизбежным .
  • подготовленный оператор делает правильное форматирование (или обработку) только в правильном месте – прямо перед выполнением запроса, а не в другом месте, поэтому наша безопасность не будет полагаться на такие ненадежные источники, как
    • некоторая функция «волшебства» PHP, которая скорее портит данные, чем делает их безопасными.
    • доброжелательность одного (или нескольких) программистов, которые могут решить форматировать (или не форматировать) нашу переменную где-то в потоке программы. Это очень важно.
  • подготовленный оператор влияет на самое значение, которое входит в запрос, но не на исходную переменную, которая остается неповрежденной и может использоваться в следующем коде (который будет отправлен по электронной почте или показан на экране).
  • подготовленный оператор может сделать код приложения значительно короче, делая все форматирование за кулисами (* только если водитель разрешает).

Потому что он более безопасен.

Если три переменные заполнены данными пользователя, вам не нужно санировать входные данные. Кроме того, если вам нужно повторить этот запрос несколько раз, общее выполнение должно быть быстрее.

И я лично считаю, что читать и отлаживать легче, когда вам придется читать ваши запросы через пару месяцев …