Могу ли я смешивать неограниченные параметры в подготовленных утверждениях? - PullRequest
0 голосов
/ 20 января 2020

Как я делаю с $_SESSION['userid'] здесь:

function changeEmail($newEmail){
    $stmt = $mysqli->prepare("update `users` set `email`=? where `userid`={$_SESSION['userid']} limit 1");
    $stmt->bind_param('s',$newEmail);
    return $stmt->execute();
}

Так как: значение $_SESSION['userid'] генерируется из базы данных (через целое число auto_increment), поэтому нет риска инъекции SQL. Кроме того, я предполагаю, что объединение значения немного быстрее, чем связывание.

1 Ответ

5 голосов
/ 20 января 2020

Да, но вы действительно не должны!

3 балла:

  1. Вам необходимо связать все параметры независимо от того, откуда они берутся, в противном случае ваш код все еще уязвим для SQL инъекция.
  2. Параметры привязки делают код чище. Вам не нужно беспокоиться о правильном цитировании, интерполяции или типах данных.
  3. Нет смысла в конкатенации / интерполяции. Код не будет ни быстрее, ни яснее, ни лучше. Вы уже связали один параметр, так почему бы не связать остальные?

Пока вы вводите переменную input непосредственно в SQL, ваш код уязвим для SQL внедрения. Всегда используйте привязку данных!

...