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

标签 php mysql regex preg-match-all

我在尝试从文本框中搜索多个单词时遇到问题,但无法修复它。下面的代码不起作用,但它适用于搜索 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)){    
 ?>

最佳答案

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

此外,为了确保帖子包含每个单词(例如“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 对表列进行索引,并在该表上启用 KEYS :

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

关于php - 使用 PHP 在 MySQL 中进行多词搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42351752/

相关文章:

C++11 CMake : Regex fails

php - MySQL:从特定类型的字段中搜索所有字段

php - Doctrine 产生 Integrity constraint violation 1451

mysql - 在终端中垂直显示 MySQL 结果

php - 删除操作在 ajax 中不起作用

java - 使用 java.util.regex API 的正则表达式 - java

c - 与 glibc 中的正则表达式( anchor )不一致

php - 必须更改临时密码

javascript - 单击加载 PHP 文件

javascript - 与 mysql 连接的实时图表问题