【发布时间】:2023-03-03 01:56:01
【问题描述】:
我的任务是为我的小组项目构建一个非常简单的搜索功能,但我目前陷入困境,无法再继续!
这个想法是使用关键字(例如黄金、手表、皮革)进行搜索,当您点击搜索时,它应该向数据库发送一个选择查询。
我分解了 get 数组并将其从空格中删除并在单词周围放置 %,然后我将它们分解为一个名为 $searchQuery 的字符串。
我与数据库建立了连接,当我搜索一个单词(例如,仅黄金或手表)时,它的效果很好,并且给了我期望的结果,但是一旦有多个单词,它只是说“未找到产品”。
下面是我的代码。第一个是表格,第二个差不多是搜索功能。任何帮助将不胜感激!
<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>
【问题讨论】:
-
你的 AND 应该是 OR 吗?
-
我尝试用 OR 替换 AND,但它仍然不会给我任何东西。感谢您的回答!
-
您还需要将查询与占位符分开。就目前而言,您将查询的
AND title LIKE部分作为要过滤的值传递。占位符不是替代连接函数。 -
?action=search你也没有使用 PHP 正在寻找$_GET['action']数组并等于“搜索”的部分。 -
我想我明白你的意思,但你能进一步解释一下吗?
AND title LIKE不应该在 implode 函数中?编辑: ?action=search 正常工作,$_GET['action']通过索引页“连接”