我正在将我正在开发的 Web 应用程序切换到 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;DR:试图找到参数化 SQL 条件的动态列表的最佳方法。
提前致谢!