喜欢用PDO准备语句中使用多个关键字搜寻领域查询(LIKE query using multiple

2019-07-03 12:59发布

网站用户使用搜索表单来查询产品的数据库。 关键字输入的搜索标题为产品在数据库中。

    public function startSearch($keywords){
        $keywords = preg_split('/[\s]+/', $keywords);
        $totalKeywords = count($keywords);

        foreach($keywords as $key => $keyword){
            $search .= '%'.$keyword.'%';
            if($key != ($totalKeywords)-1){
                $search .= ' AND itemTitle LIKE ';
            }
        }
$sql=$this->db->prepare("SELECT * FROM prodsTable WHERE itemTitle LIKE ?");
$sql->bindParam(1, $search);        
$sql->execute ();
$sql->fetchALL(PDO::FETCH_ASSOC);

搜索工作,如果用户输入一个关键词,但如果使用多个关键字查询不执行。

如果:$关键字= '苹果iPod'; $搜索= '%苹果%和itemTitle LIKE%的ipod%';

所以准备好的语句应该是这样的:

“SELECT * FROM prodsTable WHERE itemTitle LIKE%苹果%和itemTitle LIKE%的ipod%”

没有结果返回时,两款产品应该返回兼具“苹果”和标题的“iPod”。

我究竟做错了什么?

Answer 1:

准备的语句保护你免受SQL注入,在参数,使SQL代码不会被解释。 你必须建立正确数量的SQL查询AND itemTitle LIKE ? 在调用prepare()之前。

  $keywords = preg_split('/[\s]+/', $keywords);
  $totalKeywords = count($keywords);
  $query = "SELECT * FROM prodsTable WHERE itemTitle LIKE ?";

  for($i=1 ; $i < $totalKeywords; $i++){
    $query .= " AND itemTitle LIKE ? ";
  }

  $sql=$this->db->prepare($query);
  foreach($keywords as $key => $keyword){
    $sql->bindParam($key+1, '%'.$keyword.'%');
  }
  $sql->execute ();


文章来源: LIKE query using multiple keywords from search field using PDO prepared statement
标签: php pdo sql-like