这很奇怪我有一个存储多边形的数据库和一个正在运行的查询,该查询检查一个点是否存在于任何多边形中并检索它们。但是,当查询在我的 php 代码中创建为 sql 字符串时,它不会返回任何内容,但是如果我手动输入查询 - 它运行完美!
#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 的方式:
公共函数 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));
Where$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 个额外的字符 - 我有一种奇怪的感觉,这些字符正在引起问题......我该如何进一步......