【问题标题】:Showing result based on url PDO根据 url PDO 显示结果
【发布时间】: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'] 怎么了?
  • 你们都投了反对票..我认为这对未来的人们也会有所帮助

标签: php mysql pdo


【解决方案1】:

对于 LIKE 语句中使用的预准备值,“?”或“%”字符必须与值一起添加,不能在sql语句中。

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

【讨论】:

  • 感谢 btype 但不适用于 loc ..查看更新的答案
  • 也许这个页面上的答案可以帮助你:stackoverflow.com/questions/1586587/… 或者,在网上查找:“pdo bind in statement”。
猜你喜欢
  • 1970-01-01
  • 2017-02-08
  • 1970-01-01
  • 2021-08-14
  • 2017-12-05
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多