具有负双精度值的PHP MySQL查询

具有负双精度值的PHP MySQL查询,php,mysql,double,Php,Mysql,Double,我的数据库中有一个存储十进制坐标的表,我正试图使用PHP和MySQL查询它 我遇到的问题是,当我试图检索具有负值的行时 我正在使用以下格式的url在web浏览器中进行测试: JSON输出与纬度的预期一致,但经度检索所有行,而不管它们是否位于where子句之外 <?php $latFrom = $_GET['latfrom']; $latTo = $_GET['latto']; $lonFrom = $_GET['lonfrom']; $lonTo = $_GET['lonto']; $co

我的数据库中有一个存储十进制坐标的表,我正试图使用PHP和MySQL查询它

我遇到的问题是,当我试图检索具有负值的行时

我正在使用以下格式的url在web浏览器中进行测试:

JSON输出与纬度的预期一致,但经度检索所有行,而不管它们是否位于where子句之外

<?php
$latFrom = $_GET['latfrom'];
$latTo = $_GET['latto'];
$lonFrom = $_GET['lonfrom'];
$lonTo = $_GET['lonto'];
$connection = db_connect();
if ($connection->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} else {
    $query = "SELECT * FROM coordinates WHERE (`longitude` BETWEEN '" . $lonFrom . "' AND '" . $lonTo . "') AND (`latitude` BETWEEN '".$latFrom."' AND '".$latTo."')";
    $result = mysqli_query($connection,$query);
    if (!$result) {
        printf("Error: %s\n", mysqli_error($connection));
        exit();
    } else {
        $rows1 = array();
        while($r = mysqli_fetch_array($result,MYSQLI_ASSOC)) {
            $rows[] = $r;
    }
}

function filter_val($val){
    $val = array_map('utf8_encode', $val);
    return $val;
}
    $rows = array_map('filter_val', $rows);

    mysqli_close($connection);
    print json_encode($rows);
}
我的印象是最低的负值必须是WHERE子句中的第一个值。我尝试了各种方法让查询在php中工作。我还认为float/double在MySQL中存储为字符串,因此我尝试将值转换为float

我遗漏了一些东西,但无法确定是什么


谢谢

哦,亲爱的,看完这个问题后,我意识到我在url中的一个参数上打错了。我相信我现在编辑的代码正在运行,因此可能对其他人有所帮助。如果你花时间看这个,我道歉。(花了一整天的时间!)在phpMyAdmin查询中,看起来您已经交换了lonFrom和lonTo的值。。。MySQL-BETWEEN中参数的顺序不同“
foo在2和42之间
”与“
foo在42和2之间
”明显不同。此代码中的模式易受SQL注入攻击。。。潜在的不安全值必须在准备好的语句中作为绑定占位符提供,或者如果不可能,则通过自定义构建函数
mysqli\u real\u escape\u string
@spencer7593进行正确转义,感谢您的关注。为了这个问题,我改变了价值观,但似乎都没有做到这一点。我相信经过编辑的代码现在应该可以工作了。如果您花费了太多时间,我们深表歉意。如果phpMyAdmin查询返回预期结果,我们推测
纬度
经度
列的数据类型必须是数字而不是字符。(字符串比较可能会有不同的结果。例如,在‘-1.2’和‘2.3’’/CODE之间考虑“代码>选择”11。返回1。我的偏好是明确它,我们的意思是比较数字值,<代码> -11′+0在'-2.3′+0和'-1.2′+0 < /> >关于SQL注入的强制性评论和准备的重要性。绑定查询噢,亲爱的,看完这个问题后,我意识到我在url中的一个参数上打错了。我相信我现在编辑的代码是有效的代码,因此可能会对其他人有所帮助。如果你花时间看这个,我向你道歉。(为此花了一整天!)。在phpMyAdmin查询中,看起来您已经交换了lonFrom和lonTo的值…MySQL中参数的顺序在2和42之间产生了差异“
foo”在42和2之间与“
foo”在很大程度上不同。此代码中的模式易受SQL注入攻击…潜在的不安全值必须在准备好的语句中作为绑定占位符提供,或者如果不可能,则通过自定义构建函数
mysqli\u real\u escape\u string
@spencer7593进行正确转义,感谢您的关注。我更改了pu的值我认为编辑的代码现在应该可以工作了。如果您在上面花费了太多时间,我深表歉意。如果phpMyAdmin查询返回预期结果,我们推测
纬度
经度
列的数据类型必须是数字而不是字符。(字符串比较可能会有不同的结果。例如,在‘-1.2’和‘2.3’’/CODE之间考虑“代码>选择”11。返回1。我的偏好是明确它,我们的意思是比较数字值,<代码> -11′+0在'-2.3′+0和'-1.2′+0 < /> >关于SQL注入的强制性评论和准备的重要性。绑定查询
SELECT * FROM coordinates WHERE (`longitude` BETWEEN '-1.385438' AND '-1.285438') AND (`latitude` BETWEEN '51.725265' AND '51.825265');