PHP和Postgres查询问题

时间:2015-02-09 13:07:29

标签: php sql postgresql

我试图使用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);
?>

有关如何解决/解决此问题的任何建议?

2 个答案:

答案 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 typesfunctions。您可以使用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;