0

У меня был такой код

$idQuest = trim(htmlspecialchars(strip_tags($questionId)));
$setRename = trim(htmlspecialchars(strip_tags($name)));
$sql = "UPDATE question SET `user_name` = '".$setRename."' WHERE id = '".$idQuest."'";
$setName = $this->db->prepare($sql);
$setName->execute();

Мне рекомендовали, переделать его, с применением bindValue

и я сделал так

$idQuest = $questionId;
$setRename = $name;
$sth = $this->db->prepare("UPDATE question SET `user_name` = :setRename WHERE id = :idQuest");
$sth->bindValue(':setRename', $setRename, PDO::PARAM_STR);
$sth->bindValue(':idQuest', $idQuest, PDO::PARAM_INT);
$sth->execute();

Чем же он лучше?

DivMan
  • 891
  • 2
    За такое trim(htmlspecialchars(strip_tags())) сразу можно увольнять :) Особенно для ID!!! – Visman Jun 01 '17 at 16:02
  • 1-й вариант бесмысленный. Зачем prepare если запрос полный. Что нужно экранировать? Во втором случаэ db/driver сами всё правильно экранируют. – E_p Jun 01 '17 at 16:50
  • 1
    то есть первый вариант, prepare можно заменить на query и будет то же самое? – DivMan Jun 01 '17 at 16:58
  • @DivMan Да, только с SQL Injection дыркой. – E_p Jun 01 '17 at 17:05
  • А что бы не было дырки, что надо сделать? – DivMan Jun 01 '17 at 17:09
  • 2
    @DivMan, использовать второй вариант из вашего вопроса. Еще сюда зайдите https://ru.stackoverflow.com/q/637185/186083 – Visman Jun 01 '17 at 17:26

0 Answers0