使用AJAX在多个表格中搜索MYSQLI记录
我正在向我的网站添加搜索功能,目前用户可以按照模型名称搜索一个项目,例如“100D”,但他们无法搜索品牌,在这种情况下,成为'佳能'。我想让用户搜索'canon 100d',结果显示出来,目前用户只能搜索'100d'使用AJAX在多个表格中搜索MYSQLI记录
我有2个表格,一个是'品牌',一个是'模型',这允许我将品牌信息与模型分开存储,因为有一个'品牌'对多'模型'。正因为如此,我只将品牌'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,然后可以在模型搜索查询中使用...这不起作用,如果有人知道解决我的问题的方法,将不胜感激。三江源
我没有测试过这一点,但它似乎你需要一个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,布尔值在 – Bradley
你似乎混淆PDO与库MySQLi。看起来你可以交替使用这两种API,但它不会以这种方式工作 - 你需要坚持一个。哪一个取决于你 - [这篇文章](http://php.net/manual/en/mysqlinfo.api.choosing.php)可以帮助你决定哪一个。重要的是你使用占位符,并用'prepare()'绑定你的变量,而不是直接将变量注入到查询字符串中。 – Qirel