Задать вопрос
@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();
  • Вопрос задан
  • 2485 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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