我有一个简单的 php mysql 搜索来搜索数据库,但是,我似乎无法让它从搜索字段和类别中搜索文本,但我只希望它在选择时搜索类别,
这是我尝试过的代码:
if ($search !== null){
$sql = "SELECT * FROM people WHERE MATCH (lname,fname) AGAINST (:search IN BOOLEAN MODE) ORDER BY price ".$price." LIMIT ".$start.", ".$limit;
$q = $conn->prepare($sql) or die("failed!");
// Bind the params to the placeholders
$q->bindParam(':search', $search, PDO::PARAM_STR);
$q->execute();
}
if ($search !== null && $category !== null){
$sql = "SELECT * FROM people WHERE MATCH (lname,fname) AGAINST (:search IN BOOLEAN MODE) and category=:category ORDER BY price ".$price." LIMIT ".$start.", ".$limit;
$q = $conn->prepare($sql) or die("failed!");
// Bind the params to the placeholders
$q->bindParam(':search', $search, PDO::PARAM_STR);
$q->bindParam(':category', $category, PDO::PARAM_STR);
$q->execute();
}
但是,如果选择了类别字段选项,这仍然会忽略!有什么想法吗?
它们的设置如下:
// Check and set category
$category = (!empty($_GET['category']) ? $_GET['category'] : null);
// Check and set search
if(!empty($_GET['search'])){
$search = $_GET['search'];
}else{
$search = null;
}
最佳答案
进行一些调试以确保 $search
和$category
正在设置中。这很可能是你的问题。从表面上看,$category
应该被设置(因为你说它来自查询字符串),但只需检查两者即可确定。像这样的东西:
if($category !== null)
die("category = $category");
else {
die("no category");
}
//do same test for $search
如果用户通过链接 ( <a href="search.php?category=Books">Books?</a>
) 访问此页面,我不知道如何 $_GET['search']
将被设置。
我建议您更改您的 if
语句更高效(只应执行 1 条):
if ($search !== null){
if($category !== null){
//query with category
}
else {
//query w/o category
}
}
另外,我会使用isset()
检查这些变量是否被实例化而不是 empty()
.
关于php mysql - 搜索字段和类别(如果不为空),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12845782/