php按短语搜索mysql索引

0 php mysql

已经看过几个例子,当单词用双引号括起来时,按短语进行全文搜索.但是,在我的情况下,我有一个变量来自我要搜索的post数组.

function find_images($term,$dbh) {
$results = $dbh->prepare("
SELECT * FROM images 
WHERE 
MATCH(imgTitle,imgDescr,copyright,keywords) 
AGAINST( "$term" IN BOOLEAN MODE)
ORDER BY copyright, images.imgName, images.sortOrder ASC");
$results->execute();
Run Code Online (Sandbox Code Playgroud)

这不起作用:

解析错误:语法错误,意外的'$ term'(T_VARIABLE)...

我在用

AGAINST('+$term*' IN BOOLEAN MODE) ...
Run Code Online (Sandbox Code Playgroud)

但是返回包含短语中任何单词的结果.如果我在代码中输入确切的短语,我会得到正确的结果.所以我的问题是如何将我的变量放入我的代码中的双引号中,而不是抛出错误?

Jay*_*ard 5

你的报价都错了.PHP将在查询中用单引号插入变量,如下所示:

function find_images($term,$dbh) {
$results = $dbh->prepare("
SELECT * FROM images 
WHERE 
MATCH(imgTitle,imgDescr,copyright,keywords) 
AGAINST( '$term' IN BOOLEAN MODE)
ORDER BY copyright, images.imgName, images.sortOrder ASC");
$results->execute();
Run Code Online (Sandbox Code Playgroud)

警告!

Little Bobby你的脚本存在SQL注入攻击的风险.了解MySQLi的预准备语句.即使逃避字符串也不安全!

既然你已经在使用一个数据库API,支持他们,你准备的查询,这将有利于您使用带有变量的占位符准备语句.

  • 我想知道为什么OP正在使用prepare而不是实际准备任何变量.. (4认同)