我不知道为什么这不管用.这是关于在查询中使用两次参数的问题吗?使用PHP 7.4.33、Postgres PostgreSQL 9.6.22.

错误为:

Warning: pg_query_params(): Query failed: ERROR:  inconsistent types deduced for parameter $2
LINE 11:                 , $2
                           ^
DETAIL:  double precision versus numeric in /home/douglass/redata/process.php on line 36

有什么问题吗?

下面是我所做的(我知道LATT/LON在行中出现了两次,一次出现在点上,一次出现在各个列中,但出于示例的目的,我想了解错误):

已创建的表:

(
  unique_id numeric,
  latitude numeric,
  longitude numeric,
  coordinates geometry(Point,4326)
);

运行PHP:

    pg_query_params($connection, "
INSERT INTO test_table5
                (
                unique_id 
                , latitude
                , longitude
                , coordinates )
        VALUES (
        $1
                , $2
                , $3
                ,  ST_SetSRID(ST_MakePoint( $3, $2), 4326) )
        ON CONFLICT
                (unique_id)
        DO UPDATE SET
                latitude = $2
                , longitude = $3
                , coordinates =  ST_SetSRID(ST_MakePoint( $3, $2), 4326)",
                     [
                        50113947,
                        35.76673,
                        -78.36914
                     ]);

推荐答案

Postgres拥有比PHP更丰富、更严格的类型系统,因此当您传入任何值时,都需要决定它应该是什么类型.大多数情况下,您不需要考虑这一点,因为postgres deduces是使用该值的上下文中的正确类型.

这在某种程度上解释了这条信息:

为参数$2推导的类型不一致

因为您已经在两个不同的地方使用了$2,所以Postgres可以使用两个不同的上下文来推断正确的类型;问题是,它得出了两个不同的答案.

细节:双精度与数字

我们可以看到numeric是最佳 Select 的上下文:您在表中声明了latitude numeric,然后将$2插入该列.

那就剩下ST_MakePoint( $3, $2)个了.查询a manual page for the function确认它的参数是double precision类型的.

要解决歧义,可以将casts添加到一个或两个上下文中:CAST($2 AS numeric)表示表列和/或ST_MakePoint(CAST($3 AS float), CAST($2 AS float))(floatdouble precision的别名).

Php相关问答推荐

使用WooCommerce本机产品短码时不考虑价格筛选(_SHORT CODE)

在保留唯一键值对的情况下高效合并嵌套数组

使用PHP阅读XML提要

LaravelEloquent 地根据表中的值提取记录

WooCommerce/WordPress:简单的产品属性显示

PHP MySQL求和子树并与父树累加

PHP从响应应用程序json获取文件代码和URL

将一个情态形式放在细丝v3中的形式中间

哪里的表现能更好?

WooCommerce在收据页面获取产品下载URL

Woocommerce单一产品Ajax添加到带有自定义购物车项目数据的购物车

如何在PHP中根据会话将用户重定向到不同的页面?

为什么从一个页面到另一个页面都找不到 JQuery,因为它们使用相同的 twig 模板?

根据WooCommerce中选定的变体重量更改输入数量步值

ACF 更新字段功能不更新 WordPress 中的任何数据

PHP 合并/合并多维数组

如何获取用户之间的最新消息列表

PHP header() 是否缓存重定向,如果是,如何防止它这样做?

如何故意创建不同的错误(404,500,419)? Lavravel PHP

如何使用先前 SELECT 的结果来 SELECT SQL 数据