我试图使用PHP从postgress表中提取数据。我正在为查询提供参数,虽然我知道返回的表中应该有数据,但返回的数组是空的。
<?php
ini_set('memory_limit', '1024M');
// Connecting, selecting database
$dbconn = pg_connect(***My connection details***)
or die('Could not connect: ' . pg_last_error());
$lat1 = 50.5;
$lat2 = 58.0;
$lng1 = -3.5;
$lng2 = -7.0;
$colour_points = 'SELECT lat,lng,price,address_string FROM house_price_data_db.main where lat>=$1 and lat<=$2 and lng>=$3 and lng<=$4';
$result_pinpoints_points = pg_query_params($dbconn,$colour_points,array($lat1,$lat2,$lng1,$lng2)) or die('Query failed: ' . pg_last_error());
$pin_points_array = array();
while($r = pg_fetch_assoc($result_pinpoints_points)) {
$pin_points_array[] = $r;
}
header( "Content-type: application/json" ); // set the header to json
echo(json_encode(array_values($pin_points_array), JSON_NUMERIC_CHECK)); // this will return json
pg_close($dbconn);
?>
有关如何解决/解决此问题的任何建议?
答案 0 :(得分:0)
做了一个简单的错字。
'SELECT lat,lng,price,address_string FROM house_price_data_db.main where lat>=$1 and lat<=$2 and lng**>=**$3 and lng**<=**$4';
应该是:
'SELECT lat,lng,price,address_string FROM house_price_data_db.main where lat>=$1 and lat<=$2 and lng**<=**$3 and lng**>=**$4';
最后2个输入的等于/小于/大于符号需要改变,否则将没有输出。它是说&gt; -4和&lt; -7在逻辑上没有意义。
答案 1 :(得分:0)
Postgresql附带了一套方便的geometric types和functions。您可以使用point
类型而不是将纬度和经度存储在两个字段中,并且 - 甚至更好 - 创建latlong
domain over point。
使用此功能,您的查询将变为:
select position, price,address_string FROM house_price_data_db.main where position <@ box($1, $2, $3, $4);
您甚至可以直接在SQL中聚合结果,甚至将它们转换为JSON:
with
result as (
select
array_agg(main)
from
house_price_data_db.main
where position <@ box($1, $2, $3, $4)
)
select row_to_json(result) from result;