【问题标题】:Searching for MYSQLI record across multiple tables with AJAX [duplicate]使用 AJAX 在多个表中搜索 MYSQLI 记录 [重复]
【发布时间】: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


【解决方案1】:

我尚未对此进行测试,但您似乎需要JOIN,请尝试此查询

$search_query   = explode(" ", $_POST['search']);
$model_search_query = $cameras_pdo->prepare("SELECT m.id,m.model,b.brand FROM models m INNER JOIN brands b ON b.id = m.brand WHERE (m.model LIKE :model AND b.brand LIKE :brand) OR m.model LIKE :model");
$model_search_query->execute(array(':model' => "%" . $search_query[1] . "%", ':brand'=>"%" . $search_query[0] . "%"));

while ($model_search = $model_search_query->fetch(PDO::FETCH_ASSOC)) {

    // OUTPUT SEARCH RESULTS HERE 

}

【讨论】:

  • 您好,谢谢您,我刚刚对其进行了测试,这使我可以搜索品牌而不是型号。当我搜索品牌时,它会输出结果以及此错误:警告:mysqli_fetch_assoc() 期望参数 1 为 mysqli_result, boolean given in
猜你喜欢
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-18
相关资源
最近更新 更多