【发布时间】:2017-06-04 11:37:50
【问题描述】:
我正在向我的网站添加搜索功能,目前用户可以按型号名称搜索商品,例如“100D”,但他们无法搜索品牌,在本例中为“佳能”。我想让用户搜索“canon 100d”并显示结果,目前用户只能搜索“100d”
我有两张表,一张是“品牌”,一张是“型号”,这使我可以将品牌信息与模型分开存储,因为有一个“品牌”对多“模型”。因此,我只将品牌“id”存储在模型表中。
这是我的“fetch.php”文件,这是通过 AJAX 从搜索表单中调用的,这是我根据搜索表单中的输入搜索模型的查询:
$model_search_query = $cameras_pdo->prepare("SELECT * FROM models WHERE model LIKE :search");
$model_search_query->execute(array(':search' => "%" . $_POST['search'] . "%"));
while ($model_search = $model_search_query->fetch(PDO::FETCH_ASSOC)) {
$brand_search_query = "SELECT brand FROM brands WHERE id =" . $model_search['brand'];
$brand_search = mysqli_fetch_assoc(mysqli_query($cameras, $brand_search_query));
// OUTPUT SEARCH RESULTS HERE
}
?>
上面的代码允许用户搜索“100d”,然后显示结果“Canon 100D”,因为我在 while 循环中有另一个查询,它根据输入找到品牌名称。
我希望用户能够搜索字符串“canon 100d”,即使品牌名称存储在与模型不同的表中,它仍会返回结果。
我试图通过创建另一个查询来执行此操作,该查询基于输入搜索品牌,然后在品牌表中返回品牌的 ID,然后可以在模型搜索查询中使用......这个不起作用,如果有人知道解决我问题的方法,将不胜感激。谢谢你
【问题讨论】:
-
您似乎将 PDO 与 MySQLi 混淆了。看起来您可以互换使用这两种 API,但它不是那样工作的——您需要坚持使用一个。哪个取决于您 - this article 可以帮助您决定哪个。重要的是您使用占位符并将变量与
prepare()绑定,而不是将变量直接注入查询字符串。
标签: php mysql ajax search mysqli