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',我会得到所有符合其余标准的条目,所以除了它的距离部分外没有任何问题。有人能帮助我理解我能做到这一点吗?
谢谢!
,如果你有数值,你应该避免周围的瓦尔
单引号,你应该使用CONCAT像
(为有,如果你用“$ visibledistance”你EVAL HAVING distance < '4'
(你是EVAL你距离对于字符串)
展望代码
不使用聚合函数,所以你不需要有你可以通过
$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");
谢谢,我从数值中删除了所有单引号,但结果是一样的。我的怀疑是这与用“消息”处理纬度和经度领域有关,因为我看到其他人处理这个相同的任务,被鼓励使用JOIN,但我不确定我是否真的需要做那。 –
加入或在哪里条件做相同的结果..所以这我不是问题..而是检查真实的数据.. ...尝试获得由PHP建立真正的查询尝试执行它在SQL IDE .... (也可能是$ search =''不好) – scaisEdge
我的意思是说我说的是“messages.latitude” - 从来没有在这种方式之前使用列来处理。搜索工作正常,因为它是..如果我删除HAVING,GROUP BY和“.............. AS距离”部分,事情工作正常 - 这是它以前是如何,但现在我需要查询的一部分来考虑坐标,这正是我正在努力的。 –
*“如果我在桌面上用下面的方式查询:”* - 您是否关闭了每条语句?这是未来(新手)访问者的技术支持,他们可能认为这是在php中的有效语法。 –
在旁注中,我希望这不会进入从互联网执行的代码。这是SQL注入的定义。 – v010dya
请参阅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