Php 基于url PDO显示结果

Php 基于url PDO显示结果,php,mysql,pdo,Php,Mysql,Pdo,我正在使用带有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 *

我正在使用带有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.=”和(:loca)”中的位置;$bind['loca']=“$loca'”;}


上面的代码什么也得不到

print\u r($bind)
显示
Array([b类型]=>doctor[loca]=>asia'、'india)

如果我不使用预先准备好的,它就可以工作

我正在为优化搜索过滤器编写此代码

谢谢

更新

作为课程网站我做了一些改变

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)
显示
数组([b类型]=>%doctor%[loca]=>“亚洲”、“印度”)


需要使用
loc
做一些比使用内爆更好的事情。可以这样认为对于LIKE语句中使用的准备好的值,必须将“?”或“%”字符与值一起添加,而不是在sql语句中

$btype = '%'. $btype .'%';
$sqlsb = "SELECT * FROM t_business WHERE type LIKE :btype";

无论数据来自URL、POST、COOKIES、会话、文件、数据库、电子邮件、变量等,都不会改变PDO的工作方式。启用通知,您将看到,
$\u GET[loc]
非常糟糕
loc
这里指的是一个名为
loc
的常量-当它找不到该常量时,它会放弃并将其转换为字符串。
$\u GET['loc']
有什么问题吗?你们都没有投票权。我认为这也会帮助未来银行的人使用
b类型
,但不使用
loc
。请参阅更新的答案也许本页上的未回答可以帮助你:或者,在网上查找:“pdo绑定声明”。
$btype = '%'. $btype .'%';
$sqlsb = "SELECT * FROM t_business WHERE type LIKE :btype";