Задать вопрос
@jacko036

Предотвратить SQL Injection без использования bindParam?

Насколько использование такой конструкции правильно, минуя bindParam?

$sql = $db->prepare('"SELECT * FROM users WHERE email = :email');
$sql->execute(array(':email'=>$email));
$rows = $sql->fetchAll();


или правильным будет второй вариант?

$sql = $db->prepare('"SELECT * FROM users WHERE email = :email');
$sql->bindParam(':email', $email);
$sql->execute();
$rows = $sql->fetchAll();
  • Вопрос задан
  • 2484 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Это равносильно:

$sql = $db->prepare('"SELECT * FROM users WHERE email = :email');
$sql->bindParam(':email', $email, PDO::PARAM_STR);
$sql->execute();
$rows = $sql->fetchAll();


То есть все параметры будут расцениваться как строки.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
FanatPHP
@FanatPHP
Чебуратор тега РНР
С помощью небольшой магии и короткого синтаксиса код можно еще больше сократить
$sql = 'SELECT * FROM users WHERE email = ?';
$rows = $db->prepare($sql)->execute([$email])->fetchAll();
Ответ написан
Комментировать
@andreyqin
Без разницы. В обоих случаях запрос сначала подготавливается, а уже потом выполняется с определенными параметрами, и не важно как эти параметры передаются, через bindParam, bindValue или сразу в execute.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы