我在使用带有PHP的预准备语句的MySQL查询时遇到问题。以下是解释,一步一步(删除prenthesis,这里有关注搜索词)。
我有一个带搜索框的网站。其中没有括号的用户类型(hiver)。结果给出了一些好处,它发现:( Brassin d' hiver)。
然后用户再次搜索单词(d' hiver),找不到任何内容。
然后用户再次搜索(' hiver)并且搜索正确地给出了(Brassin d' hiver)。
因此在搜索中使用撇号时似乎存在问题。我进入我的代码来寻找任何问题。以下是触发搜索时调用的函数:
<?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;。但是使用准备好的声明,我无法做到。有吗?我不知道该怎么做。
注意:没有撇号的任何其他类型的搜索都会非常糟糕。
如果你们想要一个直接链接搜索来测试它,请告诉我。