1

在 FTS5 MATCH 子句中,用作过滤器的列名以冒号结尾声明,如:

... WHERE ftstable MATCH 'colname: keyword'

(根据https://sqlite.org/fts5.html#fts5_column_filters

当我尝试将“关键字”声明为绑定值时,例如:

$sql = "SELECT * FROM ftstable WHERE ftstable MATCH 'colname: :keyword'";
$stmt = $pdo->prepare($sql);
$stmt->execute(array(':keyword' => 'keyword'));

我收到以下错误:

SQLSTATE[HY000]: General error: 1 unrecognized token: ":"

因为列名后面的冒号。

我使用替代语法(?占位符、bindValue() 等)得到了同样的错误。

有谁知道这里的解决方法?还是我错过了一些明显的东西?非常感谢。

4

1 回答 1

1

字符串文字中不能有参数;没有插值完成寻找它们。但是,您可以构建一个MATCH使用字符串连接的参数:

$sql = "SELECT * FROM ftstable WHERE ftstable MATCH ('colname: ' || :keyword)";
于 2021-01-07T13:21:29.573 回答