【发布时间】:2013-12-21 15:51:54
【问题描述】:
我正在使用带有 url 查询字符串的 PDO 从数据库中获取结果
url: index.php?bType=doctor&loc=asia|india
代码:
$bind = array();
$str=explode('|',$_GET[loc]);
foreach ($str as $loc)
{
$bloc[] = $loc;
} $loca = implode("','", $bloc);
$btype=$_GET['bType'];
$sqlsb = "SELECT * FROM t_business WHERE 1=1";
if(isset($_GET['bType'])){ $sqlsb .=" AND type like :btype"; $bind['btype']='%'. $btype .'%';}
if(isset($_GET['loc'])){ $sqlsb .=" AND location IN (:loca)"; $bind['loca']="'$loca'";}
$qsb = $db->prepare($sqlsb);
$qsb->execute($bind);
上面的代码什么都没有..
print_r($bind) 显示Array ( [btype] => doctor [loca] => asia','india )
如果我不使用准备好的就这样做。
我正在编写此代码以优化搜索过滤器。
谢谢
更新
作为 CoursesWeb 我做了更改
if(isset($_GET['bType'])){ $sqlsb .=" AND type like :btype"; $bind['btype']='%'. $btype .'%';}
if(isset($_GET['loc'])){ $sqlsb .=" AND location IN (:loca)"; $bind['loca']="'$loca'";}
它适用于:btype,但不适用于:loca
print_r($bind) 显示array ( [btype] => %doctor% [loca] => 'asia','india' )
需要用 loc 做一些比使用 implode 更好的事情.. 这么想
【问题讨论】:
-
数据是否来自 URL、POST、COOKIES、SESSION、文件、数据库、电子邮件、变量等,它不会改变 PDO 的工作方式。启用通知,您会发现
$_GET[loc]很糟糕。loc这里指的是一个名为loc的常量——当它找不到它时,它放弃并将其转换为字符串。$_GET['loc']怎么了? -
你们都投了反对票..我认为这对未来的人们也会有所帮助