在 PHP 中为 MATCH AGAINST 准备的语句不起作用
Posted
技术标签:
【中文标题】在 PHP 中为 MATCH AGAINST 准备的语句不起作用【英文标题】:Prepared Statement in PHP for MATCH AGAINST not working 【发布时间】:2018-09-06 11:14:45 【问题描述】:我正在尝试在php
中执行以下MATCH AGAINST
,但它没有给出任何结果。
当我直接在phpmyadmin
中执行相同的 Select 语句时,它可以工作,但是在使用准备好的语句的 php 中它不会。它没有给出任何结果。我没有收到错误,但没有给出任何结果。
$statement = $DB->prepare('SELECT * FROM users
WHERE firstname LIKE ?
AND lastname LIKE ?
AND MATCH (firstname, lastname) AGAINST (? IN BOOLEAN MODE)');
$statement->bind_param('sss', $firstname, $lastname, $searchString);
$statement->execute();
$result = $statement->get_result();
$statement->close();
当我将以下内容放入 phpmyadmin 时,它可以正常工作,但不能超过 php
Select * FROM users WHERE firstname LIKE "d%" AND lastname LIKE "f%" and MATCH (firstname, lastname) AGAINST ("Jonny" IN BOOLEAN MODE)
准备好的语句看起来如何?它的正确语法是什么?
【问题讨论】:
定义“不工作”...?! 根据您发布的代码,您实际上并没有执行查询 与您的 phpmyadmin 查询相反,您准备的查询也与number
匹配……我们应该如何确定这是否会造成问题?
您是否在检查错误?
@Zain $firstname .= '%';
...
【参考方案1】:
根据我对您的phpmyadmin
查询的理解,您没有使您的变量适合LIKE
。所以在像这样绑定之前连接你的变量
$firstname .= '%';
$lastname .= '%';
在这之后告诉我会发生什么。谢谢!
【讨论】:
这是对黑暗的大胆尝试…… 嗯.. 你甚至帮助了我:) @deceze 可能是关于元数据的讨论,但我想知道你对那种“在黑暗中大胆刺伤”的立场 @Thomas 为什么不呢? 酥油,如果它真的对 OP 有帮助,那就给他们更多的权力。首先,这个问题应该被关闭,因为它不清楚。如果您想尝试回答不清楚的问题,我不在乎。 很高兴能为您提供帮助。干杯!以上是关于在 PHP 中为 MATCH AGAINST 准备的语句不起作用的主要内容,如果未能解决你的问题,请参考以下文章
在 MATCH() AGAINST() 中查找匹配列的名称或别名
MySQL MATCH() AGAINST() 等效于 SQL Server
MySQL 部分单词匹配结合 MATCH...AGAINST 和 LIKE 作为备份