CakePHP3 : How can I do text searching using full-text indexes

标签 cakephp cakephp-3.0

我使用下面的代码使用全文索引进行搜索

$query = $this->Posts->find()
    ->contain(['Categories' ])
    ->where([
        'MATCH(Posts.title) AGAINST(? IN BOOLEAN MODE)' => $search
]);

但我收到以下错误

SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters

请指教

提前致谢!

最佳答案

尝试将您的查询重写为:

$query = $this->Posts->find()
    ->contain(['Categories'])
    ->where([
        "MATCH(Posts.title) AGAINST(:search IN BOOLEAN MODE)" 
    ])
    ->bind(':search', $search);

确保您安装了最新的 CakePHP 3.x 版本,因为这是不久前添加的。

以下方法可行,但请注意,它会使您的代码容易受到 SQL 注入(inject)攻击:

// for educational purposes only. Don't use in production environments
$query = $this->Posts->find() 
    ->contain(['Categories'])
    ->where([
        "MATCH(Posts.title) AGAINST('{$search}' IN BOOLEAN MODE)" 
    ]);

关于CakePHP3 : How can I do text searching using full-text indexes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34358366/

相关文章:

cakephp - 如何过滤 CakePHP 中的深层关联

php - 使用 CakePHP3 将文件/图像上传到数据库

php - 我如何在 CakePHP 3.0 中获得随机行?

php - CakePHP 3.0 查询字符串参数与传递参数

cakephp - 在 Cakephp 中使用通配符管理 Redis 键

CakePHP HABTM 表单提交

php - CakePHP fatal error : Call to a member function check() on a non-object?

php - 如何使用 cakephp 在另一个查询结果上搜索查询?

php - Cakephp 3中配置Redis EC Amazon

php - 手动安装 cakephp 3,没有 Composer