【发布时间】:2019-04-11 00:20:17
【问题描述】:
我正在开发一个带有搜索功能的小型常见问题解答网站
现在我使用 SQL 并像这样搜索正确的条目:
<form action="search.php" method="get">
<label>
Search
<input type="text" name="keywords" autocomplete="off">
</label>
<input type="submit" value="Search">
</form>
<?php
require_once '../db/connect.php';
if (isset($_GET['keywords'])&& empty($_GET['keywords']) === false) {
// code...
$keywords = $connection->real_escape_string($_GET['keywords']);
$query = $connection->query("
SELECT question, answer
FROM FAQ
WHERE tags LIKE '%{$keywords}%'
");
?>
当我搜索“WLAN”时,它会显示标签中包含“Wlan,Connection,...”的条目。 当我搜索 Connection 时,它显示相同的条目。到目前为止很棒! 但是当我搜索“与 WLAN 的连接”时,它不起作用......显然。 有没有简单的方法来实现这个?
类似于 '%{$keywords}%' 我可以说它必须等于字符串的某个部分。
有什么想法吗?
【问题讨论】:
-
您必须循环并添加多个
LIKE语句。 -
不要依赖
real_escape_string()函数来防止SQL注入,they alone are not sufficient。您应该通过mysqli 或PDO 使用带有绑定参数的预处理语句。 This post 有一些很好的例子。 -
您使用的是什么数据库?它可能内置了全文搜索功能。
-
@AlexHowansky 感谢您的关注,但无法从 www 访问此站点,它仅供员工使用,因此安全性不会成为太大问题。但是,如果我能绕过,我会这样做。
-
“所以安全性不会是那么大的问题”永远不要这么想。