连接到 postgres 时出错(pg_close)
Error connect to postgres(pg_close)
我有以下代码:
require 'dataload.php';
function get_objects($where,$name=false) {
global $epsg, $cnt_array;
$db = Dataload::getDB();
$columns="osm_id, ST_AsGeoJSON(ST_Transform(way,4326)) as way2, name, ward, \"healthcare:speciality\", information, description, social_facility, \"social_facility:for\", capacity, operator, official_name, official_status, phone, website, \"addr:full\", \"addr:city\", \"addr:district\", \"addr:postcode\", opening_hours, \"addr:hamlet\", \"addr:street\", fax, email, allhuman, adulthuman, childhuman, \"healthcare:heart\", \"healthcare:mind\", \"healthcare:maternity_light\", \"healthcare:maternity_hard\", \"healthcare:dtp\", \"ward:speciality_gynaecology\", \"ward:speciality_maternity\", \"ward:speciality_infectious_diseases\", \"ward:speciality_neurology\", \"ward:speciality_paediatrics\", \"ward:speciality_general\", \"ward:speciality_surgery\", \"internet_access:operator\", \"internet_access:speed\", \"wifi_access:ssid\"";
$query="select ".$columns." from test_point where ".$where;
$result = pg_query($query);
if (!$result) {
echo "Problem with query " . $query . "<br/>";
echo pg_last_error();
exit();
}
$geojson = array(
'type' => 'FeatureCollection',
'features' => array(),
'crs' => array(
'type' => 'EPSG',
'properties' => array('code' => '4326')
)
);
while($myrow = pg_fetch_assoc($result)) {
$gos18_work = array();
if($name=="gos18") {
$query_gos18_work = "select * from gos18_work where obj=".$myrow["osm_id"];
$result_gos18_work = pg_query($query_gos18_work);
if (!$result_gos18_work) {
echo "Problem with query " . $query_gos18_work . "<br/>";
echo pg_last_error();
exit();
}
while($myrow_gos18 = pg_fetch_assoc($result_gos18_work)) {
$gos18_work[] = array(
blah=>blah
);
}
}
$feature = array(
'type' => 'Feature',
'id' => $myrow["osm_id"],
'layer' => $epsg,
'geometry' => json_decode($myrow["way2"], true),
'geometry_name' => 'way',
'properties' => array(
'name' => $myrow["name"],
)
);
// Add feature array to feature collection array
array_push($geojson['features'], $feature);
}
// Close database connection
pg_close($db);
}
if(blah) ......get_objects($where);....
数据加载(class 获取 DB):
public static function getDB() {
return pg_connect('host=notlocalhost port=5432 user=user password=password dbname=dbname')
or die("not connect".pg_last_error());
}
如果 DB 连接到本地主机,但另一台服务器(没有 DB 的复制站点),则此方法有效 return 错误:
Warning: pg_close() expects parameter 1 to be resource, boolean
given in my.php on line....
但是!如果注释 pg_close()
这工作没有任何错误并且 return 来自 DB.
php pg_connect 手册中的评论:
Beware about writing something like
<?php
function getdb_FAILS() {
return pg_connect("...") or die('connection failed');
}
?>
It will return a boolean. This will appear to be fine if you don't
use the return value as a db connection handle, but will fail if you
do.
Instead, use:
<?php
function getdb() {
$db = pg_connect("...") or die('connection failed');
return $db;
}
?>
which actually returns a handle.
希望对您有所帮助。
我有以下代码:
require 'dataload.php';
function get_objects($where,$name=false) {
global $epsg, $cnt_array;
$db = Dataload::getDB();
$columns="osm_id, ST_AsGeoJSON(ST_Transform(way,4326)) as way2, name, ward, \"healthcare:speciality\", information, description, social_facility, \"social_facility:for\", capacity, operator, official_name, official_status, phone, website, \"addr:full\", \"addr:city\", \"addr:district\", \"addr:postcode\", opening_hours, \"addr:hamlet\", \"addr:street\", fax, email, allhuman, adulthuman, childhuman, \"healthcare:heart\", \"healthcare:mind\", \"healthcare:maternity_light\", \"healthcare:maternity_hard\", \"healthcare:dtp\", \"ward:speciality_gynaecology\", \"ward:speciality_maternity\", \"ward:speciality_infectious_diseases\", \"ward:speciality_neurology\", \"ward:speciality_paediatrics\", \"ward:speciality_general\", \"ward:speciality_surgery\", \"internet_access:operator\", \"internet_access:speed\", \"wifi_access:ssid\"";
$query="select ".$columns." from test_point where ".$where;
$result = pg_query($query);
if (!$result) {
echo "Problem with query " . $query . "<br/>";
echo pg_last_error();
exit();
}
$geojson = array(
'type' => 'FeatureCollection',
'features' => array(),
'crs' => array(
'type' => 'EPSG',
'properties' => array('code' => '4326')
)
);
while($myrow = pg_fetch_assoc($result)) {
$gos18_work = array();
if($name=="gos18") {
$query_gos18_work = "select * from gos18_work where obj=".$myrow["osm_id"];
$result_gos18_work = pg_query($query_gos18_work);
if (!$result_gos18_work) {
echo "Problem with query " . $query_gos18_work . "<br/>";
echo pg_last_error();
exit();
}
while($myrow_gos18 = pg_fetch_assoc($result_gos18_work)) {
$gos18_work[] = array(
blah=>blah
);
}
}
$feature = array(
'type' => 'Feature',
'id' => $myrow["osm_id"],
'layer' => $epsg,
'geometry' => json_decode($myrow["way2"], true),
'geometry_name' => 'way',
'properties' => array(
'name' => $myrow["name"],
)
);
// Add feature array to feature collection array
array_push($geojson['features'], $feature);
}
// Close database connection
pg_close($db);
}
if(blah) ......get_objects($where);....
数据加载(class 获取 DB):
public static function getDB() {
return pg_connect('host=notlocalhost port=5432 user=user password=password dbname=dbname')
or die("not connect".pg_last_error());
}
如果 DB 连接到本地主机,但另一台服务器(没有 DB 的复制站点),则此方法有效 return 错误:
Warning: pg_close() expects parameter 1 to be resource, boolean given in my.php on line....
但是!如果注释 pg_close()
这工作没有任何错误并且 return 来自 DB.
php pg_connect 手册中的评论:
Beware about writing something like
<?php function getdb_FAILS() { return pg_connect("...") or die('connection failed'); } ?>
It will return a boolean. This will appear to be fine if you don't use the return value as a db connection handle, but will fail if you do.
Instead, use:
<?php function getdb() { $db = pg_connect("...") or die('connection failed'); return $db; } ?>
which actually returns a handle.
希望对您有所帮助。