空间几何 SQL - 两个完全相同的查询,一个有效,另一个无效

Spatial Geomety SQL - two exact same queries one works the other doesn't

这很奇怪我有一个存储多边形的数据库和一个查询 运行 检查任何多边形中是否存在一个点并检索它们。但是,当查询在我的 php 代码中创建为 sql 字符串时,它 returns 什么都没有,但是如果我手动输入查询 - 它运行完美!

#This works
SELECT * FROM locations 
WHERE type = 'polygon' AND locationable_type = 'Notification' AND 
ST_CONTAINS(locations.geoshape, GeomFromText('Point(25.276987 55.296249)') ) ;

#This doesnt work
SELECT * FROM locations 
WHERE type = 'polygon' AND locationable_type = 'Notification' AND  
ST_CONTAINS(locations.geoshape, GeomFromText('Point(‎25.276987 55.296249)') );

下面是 sql 我实际生成的方式:

public 函数 get_by_coords($latitude, $longitude){

// this grabs all the notifications
$sql = sprintf("SELECT * FROM locations WHERE type = 'polygon' AND locationable_type = 'Notification' 
        AND ST_CONTAINS(locations.geoshape, GeomFromText('point(%s, %s)') )", ($latitude), ($longitude));

其中 $latitude, $longitude 实际上是从 GET 变量中作为字符串传递的。我尝试进行类型转换,但结果是:

$latitude = "25.276987";
(float)$latitude; // equals zero

这是怎么回事?我在这里使用 Codeigniter。

更新

我刚刚做了一个 var_dump,发现了一些奇怪的东西。如果我 var_dump 创建的 SQL 查询显示比我 var_dump 直接输入字符串的查询多 6 个字符,即:

string(166) "SELECT * FROM locations  WHERE type = 'polygon' AND locationable_type = 'Notification' AND  ST_CONTAINS(locations.geoshape, Point('‎25.27116987','‎55.292216249'))"
string(160) "SELECT * FROM locations  WHERE type = 'polygon' AND locationable_type = 'Notification' AND  ST_CONTAINS(locations.geoshape, Point('25.27116987','55.292216249'))"

第一个字符串是生成的,而第二个字符串是按原样生成的 - 它显示第一个字符串中有 6 个额外的字符 - 我有一种奇怪的感觉,这些字符导致了问题..我如何在这里进一步...

据我所知,在 php 函数中,我们仍然需要在参数前面加上美元符号。

就像你在函数....($latitude), ($longitude));中所做的那样

因此你的函数参数应该是

public function get_by_coords($latitude,$longitude){

$sql = sprintf("SELECT * FROM locations WHERE type = 'polygon' AND locationable_type = 'Notification' 
        AND ST_CONTAINS(locations.geoshape, GeomFromText('point(%s, %s)') )", ($latitude), ($longitude));
}

大家好,抱歉回复晚了。我设法找出问题所在。我对生成的 sql 与手动输入的 sql 做了一个简单的 strlen,发现长度不一致。有一些隐藏的字符 - 一个简单的删除不可打印的字符也是如此,它就像一个魅力。