pg_query结果包含string而不是整数,数字

当我从pg_query的postgresql数据库中获取数据时,所有的数字字段都以stringforms返回。 有没有办法解决这个问题,还是我必须按照我需要的方式来模拟每一个领域?

这就是PHP所做的。 从手册 :

数组中的每个值都表示为一个string。

也许有点偏离主题 – 让我知道,我会放弃我的答案 – 但仍然,这是Pomm项目的原因之一:因为默认情况下,布尔值返回string“T”和“F”(真假)。

这是非常不方便的,它避免了开发者使用像数组,范围,几何types等复杂和有用的结构。

Pomm的Foundation软件包使用pg_field_type函数来触发转换器的结果和参数:

select array[1, 2, 3]::int4[] as some_ints, now() as a_date, point(1,2) as a_point, true as a_bool ; 

使用PDO或本地PHP的Postgres库执行此查询确实会返回如下所示的string数组:

 some_ints │ a_date │ a_point │ a_bool {1,2,3} │ 2015-07-31 07:35:36.143182+00 │ (1,2) │ t 

使用Pomm的Foundation做这个查询确实返回一个带有单个数组结果的迭代器:

 [ "some_ints" => [ 1, 2, 3 ], "a_date" => <DateTime> { date: "2015-07-31 07:45:21.438447", timezone_type: 1, timezone: "+00:00" }, "a_point" => <PommProject\Foundation\Converter\Type\Point> { x: 1.0, y: 2.0 }, "a_bool" => true ] 

转换器系统也适用于查询参数:

 $sql = <<<SQL select 2 = ANY($*::int4[]) as contain_two, now() > $*::timestamptz as is_past, circle(point(0,0), 5) @> $*::point as is_in_circle ; SQL; $res = $pomm ->getDefaultSession() ->getQueryManager() ->query($sql, [ [1,2,3], new \DateTime('yesterday'), new \PommProject\Foundation\Converter\Type\Point('(3,3)') ]) ->current() ; 

这返回:

 [ "contain_two" => true, "is_past" => true, "is_in_circle" => true ] 

甚至可以创build自定义转换器并声明如何转换组合(行)types。 关于它的更详细的文章在这里 。