PHP:具有在哪里不是MySQL查询工作结合

PHP:具有在哪里不是MySQL查询工作结合

问题描述:

我有一个表命名的消息,其中一个条目包含相同,如下所示:PHP:具有在哪里不是MySQL查询工作结合

longtitude = 4.867478333333334 
latitude = 52.31819833333334 
username = 'pb' 

如果我在表中查询与下面:

$longitude=4.867478333333334 
$latitude=52.31819833333334 
$username='pb' 
$search='' 
$visibledistance=2 

使用下面的MySQL查询:

我没有得到任何结果。如果我移除距离<'$ visibledistance',我会得到所有符合其余标准的条目,所以除了它的距离部分外没有任何问题。有人能帮助我理解我能做到这一点吗?

谢谢!

+2

*“如果我在桌面上用下面的方式查询:”* - 您是否关闭了每条语句?这是未来(新手)访问者的技术支持,他们可能认为这是在php中的有效语法。 –

+2

在旁注中,我希望这不会进入从互联网执行的代码。这是SQL注入的定义。 – v010dya

+0

请参阅http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php和http://stackoverflow.com/documentation/php/5828/pdo/2685/preventing- sql -injection-with-parameterized-queries#t = 201703091904411986445欲了解更多信息 – WOUNDEDStevenJones

,如果你有数值,你应该避免周围的瓦尔

单引号,你应该使用CONCAT像

(为有,如果你用“$ visibledistance”你EVAL HAVING distance < '4'(你是EVAL你距离对于字符串)

展望代码
不使用聚合函数,所以你不需要有你可以通过

地方使用(但诺伊别名)郝晓红和distcint代替组
$query=("SELECT distinct 
    subject,username,message,timestamp,(
     6371 * acos (
      cos (radians($latitude)) 
     * cos(radians(Messages.latitude)) 
     * cos(radians(Messages.longitude) - radians($longitude)) 
     + sin (radians($latitude)) 
     * sin(radians(Messages.latitude)) 
    ) 
    ) AS distance FROM Messages WHERE username ='pb' AND ((subject LIKE concat('%', '$search', '%') 
      OR (message LIKE concat('%','$search','%'))  

    WHERE (
     6371 * acos (
      cos (radians($latitude)) 
     * cos(radians(Messages.latitude)) 
     * cos(radians(Messages.longitude) - radians($longitude)) 
     + sin (radians($latitude)) 
     * sin(radians(Messages.latitude)) 
    ) 
    ) < $visibledistance 
    ORDER BY timestamp"); 
+0

谢谢,我从数值中删除了所有单引号,但结果是一样的。我的怀疑是这与用“消息”处理纬度和经度领域有关,因为我看到其他人处理这个相同的任务,被鼓励使用JOIN,但我不确定我是否真的需要做那。 –

+0

加入或在哪里条件做相同的结果..所以这我不是问题..而是检查真实的数据.. ...尝试获得由PHP建立真正的查询尝试执行它在SQL IDE .... (也可能是$ search =''不好) – scaisEdge

+0

我的意思是说我说的是“messages.latitude” - 从来没有在这种方式之前使用列来处理。搜索工作正常,因为它是..如果我删除HAVING,GROUP BY和“.............. AS距离”部分,事情工作正常 - 这是它以前是如何,但现在我需要查询的一部分来考虑坐标,这正是我正在努力的。 –