@hunter2

Безопасен ли данный запрос с pdo?

$sql = "SELECT * FROM bid b
          LEFT JOIN type t USING(type_id)
          LEFT JOIN currency c USING(currency_id)
          LEFT JOIN rate r USING(rate_id) WHERE t.type_name = :typeName";

    $result = $db->prepare($sql);
    $result->bindParam(':typeName', $_POST['type_name'], PDO::PARAM_STR);
    $result->execute();


и еще вопрос в догонку, если мне когда нет параметра $_POST['type_name'] то и условие в запросе WHERE t.type_name = :typeName"; уже не нужно те нужно просто выбрать все записи как сделать лучше ? Напихать кучу if ?
  • Вопрос задан
  • 174 просмотра
Пригласить эксперта
Ответы на вопрос 3
@vdem
1. Безопасен.
2.
$sql = 'SELECT * FROM bid b
          LEFT JOIN currency c USING(currency_id)
          LEFT JOIN rate r USING(rate_id)'
          . (isset($_POST['type_name'])? ' LEFT JOIN type t USING(type_id) WHERE t.type_name = :typeName': '');

    $result = $db->prepare($sql);
    if(isset($_POST['type_name'])) {
        $result->bindParam(':typeName', $_POST['type_name'], PDO::PARAM_STR);
    }
    $result->execute();
Ответ написан
Комментировать
@Niomin
Да.

И да, с помощью if :)
Я обычно беру простую надстройку над pdo, с методом, куда можно передать запрос с кучей параметров, уже внутри метода все биндятся.
Ответ написан
MetaDone
@MetaDone
Хорошо сформулированный вопрос - 50% решения
добавьте к этому еще
php.net/manual/ru/function.filter-input.php
php.net/manual/ru/filter.filters.php
по второму пункту - разбейте на 3 метода
если есть type_name - то вызываете второй в запросом выше
если нет - то получаете все
Ответ написан
Ваш ответ на вопрос

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

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