Я переключаю веб-приложение, над которым я работаю, на PDO (из ужасного и небезопасного mysql_query) и испытываю некоторые затруднения с тем, как адаптировать существующий запрос к новому формату.Запрос находит элементы мультимедиа файлов определенных типов:
Формат GET отформатирован следующим образом: jpg, png, gif
(приведенный ниже код экранирован, но былупрощенно для этого примера)
$query = "SELECT * FROM `media` WHERE `active` = '1' AND `thumb` IS NULL ";
if($_GET['extensions']){
$extensions = array_filter(explode(',',str_replace(' ','',strtolower($_GET['extensions']))));
foreach($extensions as $extension){
$extension_sql[] = "`type` = '$extension' ";
}
if(count($extension_sql) > 0){
$query .= 'AND (' . implode('OR ', $extension_sql) . ')';
}
}
$query .= "ORDER BY `created` DESC ";
$result = mysql_query($query);
while($media = mysql_fetch_array($result)){
// Do stuff
}
Возможно, я собирался сделать это полностью назад, и он должен использовать функцию IN (), но независимо от этого мне нужно преобразовать это в параметризованный оператор PDO, такой как:
$sth = $dbh->prepare("SELECT * FROM `media` WHERE `active` = '1' AND `thumb` IS NULL AND `type` IN(:set) ORDER BY `created` DESC ");
$types = implode(',', array_filter(explode(',',str_replace(' ','',strtolower($_GET['extensions']))));
$sth->bindParam(':set', $types);
$sth->execute();
while($datatype_option_row = $sth->fetch()){
// Do stuff
}
Очевидно, что это не сработает ... но я пытаюсь быть эффективным и безопасным с небольшим успехом.Я мог бы зацикливаться на файлах типов для создания SQL, а затем снова зацикливаться на связываниях ... но хотел посмотреть, есть ли у кого-нибудь здесь советы мудрецов для другого подхода.
TL;ДР: Попытка найти лучший способ параметризации динамических списков условных выражений SQL.
Заранее спасибо!