SQLite FTS5 through PHP/PDO - 如何在过滤列名时绑定值?

SQLite FTS5 through PHP/PDO - How to bind values while filtering on a column name?

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

... WHERE ftstable MATCH 'colname: keyword'

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

当我尝试将 'keyword' 声明为绑定值时,例如:

$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() 等)时遇到同样的错误。

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

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

$sql = "SELECT * FROM ftstable WHERE ftstable MATCH ('colname: ' || :keyword)";