PHP MySQL预处理语句 - 使用包含撇号的LIKE搜索不起作用

时间:2015-01-22 17:58:34

标签: php mysql prepared-statement

我在使用带有PHP的预准备语句的MySQL查询时遇到问题。以下是解释,一步一步(删除prenthesis,这里有关注搜索词)。

  1. 我有一个带搜索框的网站。其中没有括号的用户类型(hiver)。结果给出了一些好处,它发现:( Brassin d' hiver)。

  2. 然后用户再次搜索单词(d' hiver),找不到任何内容。

  3. 然后用户再次搜索(' hiver)并且搜索正确地给出了(Brassin d' hiver)。

  4. 因此在搜索中使用撇号时似乎存在问题。我进入我的代码来寻找任何问题。以下是触发搜索时调用的函数:

    <?php
    /**
     * Function to search within all Beers names.
     * @return array $theBeers All Beers information in an array.
     */
    function searchBeers($SEARCHQUERY)
    {
        $SEARCHQUERY = "%".$SEARCHQUERY."%";
    
        $theBeers = array();
    
        // Connect to Database
        $this->connect();
    
        /* create a prepared statement */
        if($stmt = $this->link->prepare("SELECT id, name FROM `beers` WHERE `beers`.`name` LIKE ? ORDER BY name ASC"))
        {
            /* bind parameters for markers */
            $stmt->bind_param('s', $SEARCHQUERY);
    
            /* execute query */
            $stmt->execute();
    
            /* bind variables to prepared statement */
            $stmt->bind_result($col1, $col2);
    
            /* fetch values */
            $i = 0;
            while($stmt->fetch())
            {
                $theBeers[$i]['id'] = $col1;
                $theBeers[$i]['name'] = $col2;
    
                $i++;
            }
    
            /* close statement */
            $stmt->close();
    
            return $theBeers;
        }   
        return false;
    }
    ?>
    

    如果我使用phpMyAdmin GUI,我可以通过在searchquery周围添加双引号来轻松解决此问题:&#34;%searchquery%&#34;。但是使用准备好的声明,我无法做到。有吗?我不知道该怎么做。

    注意:没有撇号的任何其他类型的搜索都会非常糟糕。

    如果你们想要一个直接链接搜索来测试它,请告诉我。

0 个答案:

没有答案