我已经尝试了很多不同的变体,我无法弄清楚为什么这不会返回我预期的结果。这是我现在的代码。我在LIKE之后尝试了SQL语句中的变量的许多变体,并且没有按预期返回数组。我还验证了$ search变量确实包含正确的字符串。
index.php动作开关(这可以正常工作):
case 'search_result':
$search = filter_input(INPUT_POST, 'searchBar');
$results = search_books($search);
if($results == NULL){
include('/view/search_null.php');
}else {
include('/view/search_results.php');
}
break;
我的数据库搜索功能:
function search_books($search_word){
global $db;
$query = ' SELECT * FROM books
WHERE bookTitle LIKE :search_word ';
$statement = $db->prepare($query);
$statement->bindValue(":search_word", $search_word);
$statement->execute();
$results_search = $statement->fetchAll();
$statement->closeCursor();
return ($results_search);
}
每次$ results为NULL并将我踢到我的页面时返回没有结果,即使它应该返回结果。在该页面上,我验证$ search中有正确的单词,$ results和$ results_search的数组大小为0.
(是的,我知道我应该清理$ search,这不是现在的,只是为了作业)
答案 0 :(得分:1)
您要寻找的是通过向搜索字词添加%
来使用通配符包围搜索字词,如下所示:
$search_word = '%' . $search_word . '%';
然后只需准备 / 绑定 / 执行。这是更改后的代码:
function search_books($search_word){
global $db;
$search_word = '%' . $search_word . '%'; // added
$query = ' SELECT * FROM books
WHERE bookTitle LIKE :search_word ';
$statement = $db->prepare($query);
$statement->bindValue(":search_word", $search_word);
$statement->execute();
$results_search = $statement->fetchAll();
$statement->closeCursor();
return ($results_search);
}
<小时/> 查询看起来像后参数得到它的位置:
SELECT * FROM books WHERE bookTitle LIKE '%something here%'
这会查找包含 $search_word
的任何内容。例如:
$search_word
为Rings
:
The Lord of the Rings: The Return of the King
将是匹配。
您可以在此处详细了解:Pattern Matching。
答案 1 :(得分:0)
<强>更新:强>
您将变量与查询绑定但未将绑定值放入查询中,因此请使用以下代码:(希望它适合您!)
function search_books($search_word){
global $db;
$query = " SELECT * FROM books
WHERE bookTitle LIKE % :search_word %";
$statement = $db->prepare($query);
$statement->bindValue(":search_word", $search_word);
$statement->execute();
$results_search = $statement->fetchAll();
$statement->closeCursor();
return ($results_search);
}
答案 2 :(得分:0)
.text-title {}
这就是你所需要的一切