MySQL选择在参数之间查询多个,变量不工作PHP


MySQL Select Query Multiple Between Arguments, Variable not Working PHP

我正在开发一个应用程序,对于给定的位置(坐标lat/long对),它显示位于给定起始位置给定半径内的所有实体(从数据库中提取)。

我已经测试过了,我用来寻找最近位置的逻辑非常有效。然而,在我的PHP脚本中,为了与MySQL表通信,我遇到了一个问题。

这是我正在尝试的查询,它没有从表中给出任何结果:

$sql = "SELECT * FROM merchants WHERE latitude BETWEEN '$lat1' AND '$lat2' AND longitude BETWEEN '$lon1' AND -90.2745 AND category='$merchCategory'";           

但是,通过回显$lat1、$lat2、$lon1和$lon2,我知道它们包含有效值(应该会产生查询结果)(仅供参考:这4个变量表示给定位置的半径平方;纬度经度是表中的列。)

$lon1= -90.644843447 $lon2= -90.274500553 $lat1= 38.3496784638 $lat2= 38.6395335362

然而,这是有效的(只是对值进行硬编码,而不是使用$lon2变量引用它:

$sql = "SELECT * FROM cashbackengine_merchants WHERE latitude BETWEEN '$lat1' AND '$lat2' AND longitude BETWEEN '$lon1' AND **-90.2745** AND category='$merchCategory'";            

正如这样:

$sql = "SELECT * FROM cashbackengine_merchants WHERE latitude BETWEEN '$lat1' AND '$lat2' AND longitude BETWEEN **-90.64484** AND '$lon2' AND category='$merchCategory'";           

然而,纬度一点问题都没有。我强烈认为这与语法有关,而且很可能是非常简单的事情。非常感谢您的帮助!

试试这个

$sql = "SELECT * FROM merchants WHERE latitude BETWEEN '$lat1' AND '$lat2' AND longitude BETWEEN $lon1 AND $lon2 AND category='$merchCategory'";

我不确定,但我认为这是因为BETWEEN需要两个数字来表示您的情况,而您将其作为字符串'$lon'传递。当您对一个值进行硬编码时,另一个值会自动转换为数字值。

旁注:查看准备好的语句(最好)或转义字符串,因为如果用户正在输入lat/lon值,这将打开sql注入。