gpt4 book ai didi

php - 在 PostgreSQL 中使用 PDO 时如何忽略问号作为占位符

转载 作者:可可西里 更新时间:2023-10-31 22:49:26 26 4
gpt4 key购买 nike

注意事项:

这个问题可以被认为是这个 Question 的重复.它确实指出了与 PDO 相同的问题。但由于目标不同,其变通解决方案略有不同。我将在那里发布 JSONB 的解决方法和 PHP 票证的链接。

当我准备以下查询时:

SELECT * FROM post WHERE locations ? :location;

出现以下警告:

Warning: PDO::prepare(): SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters in /path/file.php on line xx

问号是有效的 PostgreSQL operator但 PDO 将其视为占位符。

是否有正确的方法来配置 PDO 以忽略作为占位符的问号?

我将在下面发布解决方法。希望有更好的方法

编辑我添加一个 ticket在 PHP 错误跟踪系统中

最佳答案

这是解决我的问题的方法。它通过使用 PostgreSQL 函数替换 ? 运算符来解决问题。

我不太喜欢它,因为它不会使 PDO 更符合 PostgreSQL。但我没有找到真正的解决方案。

CREATE FUNCTION json_key_exists(JSONB,TEXT) RETURNS BOOLEAN LANGUAGE SQL STABLE AS $f$
SELECT $1 ? $2
$f$;

现在我可以使用查询了:

SELECT * FROM post WHERE json_key_exists(locations, :location);

解决方法是由来自 freenode #postgresql 的出色的 RhodiumToad 建议的

编辑

正如@Abelisto 所建议的,没有必要创建上面的函数,因为 jsonb_exists(jsonb, text) is avialabe

关于php - 在 PostgreSQL 中使用 PDO 时如何忽略问号作为占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36173440/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com