在 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 作为备份

MySQL match() against() - 按相关性和列排序?

Mysql利用match...against进行全文检索

mysql全文索引用于 MATCH() AGAINST 但不用于 =