подготовленные заявления – необходимы ли они

Подготовленные записи добавляют значительную часть кода … но я продолжаю слышать упоминания о их использовании … какое значение добавляется путем перехода от 1 строки кода до примерно 6? Это просто для защиты от SQL-инъекции?

Похожие сообщения здесь .

php.net на подготовленные заявления здесь

Подготовленные заявления обеспечивают отличную защиту от SQL-инъекций.

В дополнение к защите SQL-инъекций подготовленные операторы предлагают меньшую нагрузку на сервер базы данных, когда один и тот же запрос выполняется несколько раз, например, в цикле INSERT . Операция только скомпилируется RDBMS один раз, вместо того, чтобы mysql_query() каждый раз, как это было бы в mysql_query() .

Различные API-интерфейсы требуют различного количества кода для выполнения подготовленного оператора. Я считаю, что PDO может быть немного менее подробным, чем MySQLi, если, например, ваша ситуация позволяет использовать неявное связывание параметров внутри вызова execute() . Это работает, только если все ваши параметры могут быть оценены как строки.

 // PDO implicit binding example: // Not many lines of code if the situation allows for it $stmt = $pdo->prepare("SELECT * FROM tbl WHERE col1=? AND col2=? AND col3=?"); $stmt->execute(array($val1, $val2, $val3)); 

Нечестно сказать, что подготовленные заявления вызывают 1 строку кода, чтобы взорваться до 6. На самом деле, чтобы использовать один, вам нужно всего две строки: одна для подготовки оператора и одна для привязки параметров. Любой другой код, который вы пишете (выполнить запрос, связать результаты, получить результаты и т. Д.), Также потребуется, даже если вы не использовали подготовленные инструкции.

Таким образом, по сути, мы говорим о том, что одна дополнительная строка кода покупает вас. Он покупает вам две вещи:

  1. Защита от SQL-инъекций (которая также включает защиту от не-вредоносных искаженных запросов, например, предотвращение нарушения вашего запроса, если вложенная переменная содержит одну цитату)
  2. Возможные преимущества производительности, если вы закончите выполнение одного и того же подготовленного оператора для разных значений.

Точка № 2 может не всегда применяться, но считайте, что точка № 1 также избавляет вас от необходимости вручную вытеснять значения, которые нужно вставить в ваш запрос. Это будет дополнительный код (даже если вы можете сделать это в строке в той же строке), который вам нужно будет написать самостоятельно, если не использовать подготовленные операторы.

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