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