Установить переменную как значение столбца в запросе PDO - PullRequest
0 голосов
/ 24 сентября 2018
  • Когда я должен установить переменную в качестве значения столбца в запросе PDO?
  • В чем разница между кодами ниже?

:

$stmtPG = $conn->query("SELECT count(*) FROM myTable WHERE entry_type = 'post'");    
$total = $stmtPG->fetchColumn();

И:

$type = 'post';
$stmtPG = $conn->query("SELECT count(*) FROM myTable WHERE entry_type = '$type'");    
$total = $stmtPG->fetchColumn();

Значения в запросе не поступят от пользователя.

1 Ответ

0 голосов
/ 24 сентября 2018

Этот код работает одинаково, в зависимости от того, как вы его выполняете.

Но ...

В идеале вы хотели бы использовать позиционные параметры и подготовленные операторы ... ЭтоДолжен помочь вам, это частичное копирование / вставка из функции «сделай все», которую я написал, которую я использую везде.Настоятельно рекомендуем вам написать свой собственный или найти один (написать один раз, включить много, исправить один раз, когда это необходимо!).

    $dbconn = new PDO('mysql:host=' . $hostname . ';port=' . $dbPort . ';dbname=' . $dbName . ';charset=utf8', $username, $password, array(PDO::MYSQL_ATTR_FOUND_ROWS => true));
    $dbconn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $query="SELECT count(*) FROM myTable WHERE entry_type = ?");
    $parameters=array("post");
    $result = $dbconn->prepare($query);
    $result->execute($arr);
    if(!$result){
      die("Query error:".$dbconn->errorInfo());
    }
    while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
       $dataRetrieved[] = $row;
    }

Редактировать -

Спрашивающий спрашивает в комментарии ниже - "Некоторые люди говорили мне, что не нужно ставить заполнители, если ценность не исходит от клиентской стороны. И вы сделали это. Почему? Кажется, что у каждого человека свое мнение ... "

Хорошо ... Верно.Если вы выполняете статический запрос, вам не нужно параметризировать или использовать подготовленные операторы и т. Д., Поскольку вы полностью контролируете то, что используется / запрашивается и т. Д.

Но вернемся к записиодин раз, включайте везде, исправляйте в одном месте, когда это необходимо "... если я везде использую свою функцию или класс, он должен иметь возможность обрабатывать запросы, использующие пользовательский ввод, а также запросы, которые являются статическими и безопасными для известных.Таким образом, все всегда параметризуется, даже если в этом нет особой необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...