我的任务是为我的团队项目构建一个非常简单的搜索功能,我目前陷入困境,不能再进一步了!
我们的想法是搜索关键字(例如黄金,手表,皮革),当您点击搜索时,它应该向数据库发送选择查询。
我展开了get数组并从空格中修剪它并将%放在单词周围,然后我将它们打成一个名为$searchQuery
的字符串。
我有一个与数据库的连接,当我搜索单个单词(例如黄金或手表)时,它效果很好,并且给了我期望的结果,但只要有多个单词,就可以了只是说“找不到产品”。
下面,您将找到我的代码。第一个是表单,secon一个是搜索功能。任何帮助将不胜感激!
<form action="index.php?action=search" method="get">
<input type="text" name="q">
<button type="submit">Sök</button>
</form>
搜索功能代码
<?php
var_dump($_GET['q']);
$query = explode(",", $_GET['q']);
var_dump($query);
$searchQuery = array();
foreach($query as $question) {
$question = trim($question);
$question = "%".$question."%";
$searchQuery[] = $question;
}
echo "<pre>";
var_dump($searchQuery);
echo "</pre>";
$searchQuery = implode(' AND title LIKE ', $searchQuery);
echo "<pre>";
var_dump($searchQuery);
echo "</pre>";
$sql = "SELECT * FROM products WHERE title LIKE :search";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':search', $searchQuery);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "<pre>";
var_dump($result);
echo "</pre>";
$count = $stmt->rowCount();
?>
<ul>
<?
if($count == 0) {
echo "Inga produkter hittades";
} else {
foreach ($result as $product) {
echo "<li>";
echo $product['title'].", ".$product['price'].":-";
echo "</li>";
}
}
?>
</ul>
答案 0 :(得分:0)
您的代码充满了错误。
首先$question = "%".$question."%";
将生成LIKE %some%
- sql中的错误。应为$searchQuery[] = "'%".trim($question)."%'";
第二个WHERE title LIKE :search
将整个AND LIKE '%asd%' AND LIKE '%sdf%'
放入单个参数中,并将其解析为字符串。即使这部分可行,你也会遇到查询WHERE title LIKE AND LIKE '%asd%' AND LIKE '%sdf%'
- 另一个sql错误。
我认为你的代码应该像
$likes = [];
foreach($query as $question) {
$likes[] = "'%".trim($question)."%'";
}
$sql = "SELECT * FROM products";
if (!empty($likes)) {
$sql .= " WHERE title LIKE "
.array_shift($likes) // remove first element from array
.implode(" OR title LIKE ", $likes); // implode rests with 'OR'
}
$stmt = $conn->prepare($sql);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);