【发布时间】:2014-07-16 12:34:13
【问题描述】:
我遇到了一个奇怪的问题:
我有一个 php 页面,它编译并执行 MySQL 查询到我的 web 数据库。目标是使用自定义的非 MBR 空间关系函数尝试确定一个点是否在多边形内。
查询返回语法错误结果1064。
这是显示在我的页面上的回显查询:
SET @point = 'POINT(-63.610719000 44.669318000)'; SELECT * FROM `Zones` WHERE GISWithin(GeomFromText(@point), `zonePoly`) AND `zoneName` = 'trailerShareBoundary';
如果我将该查询字符串复制并粘贴到 phpMyAdmin 中,它就像一个魅力。
但是,当查询来自我的php页面时,返回以下错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT * FROM `Zones` WHERE GISWithin(GeomFromText(@point), `zonePoly`) AND `zon' at line 1(1064)
这是实现这一切的 php 代码:
if(!is_null($lng) && !is_null($lat)){
//Create a mySQL variable to store a MySQL POINT object
$query= "SET @point = 'POINT(".$lng." ".$lat.")'; ";
//Test if the POINT variable is within the trailerShareBoundary variable using
//custom MySQL function
$query.= "SELECT * FROM `Zones` WHERE GISWithin(GeomFromText(@point), `zonePoly`) AND `zoneName` = 'trailerShareBoundary';";
echo "<br/>".$query."<br/>";
$result=mysqli_query($connection,$query);
var_dump($result);
echo '<br/>';
if(!$result==false){
$instructions = "<p>LOCK REQUEST VALID</p>";
}else{
$instructions = "<p>LOCK REQUEST INVALID</p>";
echo mysqli_error($connection) . "(" . mysqli_errno($connection) . ")";
}
echo $instructions;
}
我想出了一个解决方法:
如果我首先查询数据库以创建 @point 变量,然后创建一个 SEPARATE QUERY 以使用我的 SELECT 语句查询数据库,它会神奇地工作!这就是我的意思:
这行得通:
//Create a mySQL variable to store a MySQL POINT object
$query= "SET @point = 'POINT(".$lng." ".$lat.")'; ";
$result=mysqli_query($connection,$query);
echo "<br/>".$query."<br/>";
//Test if the POINT variable is within the trailerShareBoundary variable using
//custom MySQL function
$query= "SELECT * FROM `Zones` WHERE GISWithin(GeomFromText(@point), `zonePoly`) AND `zoneName` = 'trailerShareBoundary';";
$result=mysqli_query($connection,$query);
echo "<br/>".$query."<br/>";
那么,谁能告诉我发生了什么事?
【问题讨论】: