2017-10-28 278 views
1

我是postgresql/postgis的新手,无法解决此问题。我有我使用致命错误:带有消息'SQLSTATE [42601]的未捕获异常'PDOException':

lonlat.split(","); 

click事件和分裂检索但当我将它们传递到下面的查询,我收到一个语法错误纬度长值。

$sql1=$conn->prepare("select id,ST_Contains(geom,GeomFromText(4326,'POINT(".$lon." ".$lat.")')) as yes_within from public.".$layername);  
$sql1->execute(); 

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at end of input LINE 1: ...om,GeomFromText('POINT()',4326)) as yes_within from public. ^' in C:\xampp\htdocs... Stack trace: #0 PDOStatement->execute() #1 {main} thrown in C:\xampp\htdocs... on line 22

回答

0

从错误

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at end of input LINE 1: ...om,GeomFromText('POINT()',4326)) as yes_within from public. ^' in C:\xampp\htdocs... Stack trace: #0 PDOStatement->execute() #1 {main} thrown in C:\xampp\htdocs... on line 22

这意味着,即使你认为你从分裂让他们,你不会从分裂让他们。您正在连接一个空字符串。这个问题不在PostgreSQL中。

除此之外,不要这样构造一个点。而是使用,

ST_MakePoint(long,lat)::geography 

它创建了一个geography不是geometry和它毫不文本的解析。

+0

谢谢,我曾经使用过ST_MakePoint。但ST_Contains(geom,MakePoint($ lon,$ lat))作为yes_within总是返回一个假值。这意味着我正在检索的纬度永远不会位于几何图形内,也可能是我在基础图层上覆盖(使用geoserver)的图层,未附加到它下面的图层,因此我无法从数据库中检索任何东西。我是否以错误的方式做? – ASood

相关问题