致命错误:带有消息“SQLSTATE [42601]”的未捕获异常“PDOException”:

Posted

技术标签:

【中文标题】致命错误:带有消息“SQLSTATE [42601]”的未捕获异常“PDOException”:【英文标题】:Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42601]: 【发布时间】:2017-10-28 08:57:14 【问题描述】:

我是 postgresql/postgis 的新手,无法解决这个问题。我有 lat long 值,我通过点击事件检索并使用

拆分
lonlat.split(",");

但是当我将它们传递给以下查询时,我收到了一个语法错误。

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

致命错误:未捕获的异常 'PDOException' 带有消息 'SQLSTATE[42601]:语法错误:7 错误:输入第 1 行末尾的语法错误:...om,GeomFromText('POINT( )',4326))作为来自公众的 yes_within。 ^' in C:\xampp\htdocs... 堆栈跟踪:#0 PDOStatement->execute() #1 main throw in C:\xampp\htdocs... on line 22

【问题讨论】:

【参考方案1】:

来自错误

致命错误:未捕获的异常“PDOException”,带有消息“SQLSTATE[42601]:语法错误:7 错误:输入第 1 行末尾的语法错误:...om,GeomFromText('POINT()',4326)) 作为 yes_within 来自公共。 ^' in C:\xampp\htdocs... 堆栈跟踪:#0 PDOStatement->execute() #1 main throw in C:\xampp\htdocs... on line 22

这意味着即使你认为你是从分裂中得到它们,但你并没有从分裂中得到它们。您正在连接一个空字符串。问题不在 PostgreSQL 中。

除此之外,不要以这种方式构造一个点。而是使用,

ST_MakePoint(long,lat)::geography

这会创建一个 geography 而不是 geometry 并且它在没有文本解析的情况下完成它。

【讨论】:

谢谢,我用过 ST_MakePoint 了。但是 ST_Contains(geom,MakePoint($lon,$lat)) as yes_within 总是返回一个假值。这意味着我正在检索的 lat lon 永远不会位于 geom 内,或者我在基础层上覆盖的层(使用 geoserver)未附加到它下面的层,因此我无法从数据库中检索任何内容。我做错了吗?

以上是关于致命错误:带有消息“SQLSTATE [42601]”的未捕获异常“PDOException”:的主要内容,如果未能解决你的问题,请参考以下文章

SQLCODE=-104,SQLSTATE=42601,SQLERRMC=选择 Con_Gruop_Name from;t vparam = grpName; ;<删除>

parse-php-sdk 致命错误:未捕获的异常 'Parse\ParseException' 带有消息 'unauthorized'

致命错误:未捕获的异常“PDOException”,带有消息“SQLSTATE [42000]:语法错误或访问冲突 PHP 和 PDO

致命错误:未捕获的异常 'Zend_Session_Exception' 带有消息 'Zend_Session::start()

致命错误:未捕获的异常 'mysqli_sql_exception' 带有消息 'No index used in query/prepared statement'

致命错误:带有消息的未捕获异常“com_exception”。在将ppt转换为jpg时