我在 DQL 语句中使用绑定(bind)参数时遇到问题。
我创建了一个 JSONB
DBAL 数据类型和一个名为 JSON_CONTAINS_ANY()
函数的 FunctionNode。我想要的最终查询是:
SELECT * from Cache where content->'status' ?| ['开始','进行中'];
我的 DQL 语句如下所示:
$dql = "SELECT e FROM Entity e WHERE JSON_CONTAINS_ANY(content, 'status', :statusList";
$dql->setParameter('statusList',$statusList, Jsonb::JSONB);
问题:
问题是 ?|
运算符被视为参数扩展索引并搞砸了我的查询。关于如何处理这个的任何想法?
最佳答案
我不知道我的回答是否相关,我看到这个问题是 6 年前提出的,但是,从字面上看,2 年前出现了更优雅的解决方案,那么有人可以提供帮助。您可以在此链接中详细阅读 https://wiki.php.net/rfc/pdo_escape_placeholders
从描述中,我现在要删除 ?
您可以通过这种方式进行筛选 ??
,如中所述:
That means that the “??” string would be translated to “?” when sending the query to the database, whereas “?” is still going to be interpreted as a positional parameter placeholder.
$stmt = $pdo->prepare('SELECT * FROM tbl WHERE json_col ?? ?');
$stmt->execute(['foo']);
关于php - 使用 Jsonb 绑定(bind)参数?|使用 Postgres 的 Doctrine2 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31617870/
相关文章:
c# - 在基于 Web 的架构上使用 POCO、DTO 和 ViewModel
algorithm - 生成填字游戏的高效算法(纽约时报的风格)
sql - 如何克服 `PERCENTILE_CONT` 参数应为常量的限制?
hibernate - Spring-data/Hibernate 不能正确处理空值
python - 通过 Mininet 网络发送 "random"流量
git - "git add -A"和 "git add ."之间的区别
asp.net-mvc-4 - ModelState.IsValid == false,尽管插入了所