在 MySQL 中使用 PHP 进行多词搜索

Multiple word search in MySQL with PHP

我在尝试使用文本框中的多个词进行搜索时遇到问题,但无法解决。下面的代码不起作用,但它适用于搜索 LIKE '%$keywords%'.

请看看你是否可以帮助我解决任何问题!

 $search = $_POST['search'];
 $search = trim($search);
 $search = preg_replace('/\s+/', ' ', $kerko);
 $keywords = explode(" ", $kerko);

 $sql = $conn->prepare("SELECT * FROM weblinks WHERE MATCH(post) AGAINST('$keywords')");


 $sql->execute();
 while($row = $sql->fetch(PDO::FETCH_ASSOC)){    
 ?>

您正在尝试将数组转换为字符串。 explode returns 一个数组。试试看

$search = $_POST['search'];
$search = trim($search);
$search = preg_replace('/\s+/', ' ', $kerko);
$keywords = explode(" ", $kerko);

$query = "SELECT * FROM weblinks WHERE ";
foreach ($keywords as $keyword) {
    $query .= " post LIKE '%$keyword%' OR";
}
$query = rtrim($query, 'OR');

$sql = $conn->prepare($query);    

$sql->execute();
while($row = $sql->fetch(PDO::FETCH_ASSOC)){    
?>

您必须将字符串传递给 MATCH AGAINST 函数。

此外,要确保 post 包含所有单词,例如“LIKE”,您必须在所需的开头添加“+”符号单词。

$search = $_POST['search'];
$search = trim($search);
$search = preg_replace('/\s+/', ' ', $kerko);
$keywords = explode(" ", $kerko); // create array of keywords

// here we build the string to require all keywords
$keywds_str = "+" . implode(" +", $keywords);

然后 SQL 查询:

$sql = $conn->prepare("SELECT * FROM weblinks WHERE MATCH(post) AGAINST ('".$keywds_str."')");

请注意字符串连接。在您的示例中,查询必须逐字查找“$keywords”。

最后一点,启用 php 错误报告以了解代码中的错误。空白页对您没有多大帮助。

希望对你有所帮助,祝你好运。

编辑:

由于错误信息:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error:

1191 Can't find FULLTEXT index matching the column list' in C:\xampp\htdocs\scraping\result.php:82

Stack trace: #0 C:\xampp\htdocs\scraping\result.php(82): PDOStatement->execute() #1 {main}

thrown in C:\xampp\htdocs\scraping\result.php on line 82

您必须通过 FULLTEXT 索引 table 列,并在 table 上启用 KEYS :

ALTER TABLE weblinks ENABLE KEYS; 
ALTER TABLE weblinks ADD FULLTEXT(post);