Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL SELECT查询返回不一致的结果_Php_Mysql - Fatal编程技术网

Php MySQL SELECT查询返回不一致的结果

Php MySQL SELECT查询返回不一致的结果,php,mysql,Php,Mysql,我有一个MySQL表,有6列:id主列和自动递增列、纬度双精度列、经度双精度列、数据点整数列、数据总量双精度列、平均强度双精度列 我的质询如下: SELECT * FROM iPhoneTest WHERE latitude=$lat AND longitude=$lon LIMIT 1 $lat和$lon是从$\u GET中定义的,但这不是问题所在 我的问题出现在data_points和data_total列上,因为查询为它们返回了错误的值。以下是我处理行的代码部分: $row = mysq

我有一个MySQL表,有6列:id主列和自动递增列、纬度双精度列、经度双精度列、数据点整数列、数据总量双精度列、平均强度双精度列

我的质询如下:

SELECT * FROM iPhoneTest WHERE latitude=$lat AND longitude=$lon LIMIT 1
$lat和$lon是从$\u GET中定义的,但这不是问题所在

我的问题出现在data_points和data_total列上,因为查询为它们返回了错误的值。以下是我处理行的代码部分:

$row = mysql_fetch_assoc($result);  
$pts = $row["data_points"] + 1; 
$tot = $row["data_total"] + $str;
$avg = $tot / $pts;
下面是两个不同示例的输出。正如您在两个示例中所看到的,一次迭代会更改值并重新加载页面,返回一个不正确的值,而其余的迭代会返回正确的值。这可以从以下事实中看出:data_points列每次只应上升1

以下是输出所有数据的行:$pts表示数据点,$avg表示平均强度,$tot表示数据总数:

echo $pts . " " . $avg . " " . $tot;
还有两个例子:

例如,我使用值5、7、7、10添加到数据_总数中

1 5 5    
3 5.7 17  <--- Bad query occurs here
4 6 24
5 6.8 34
例如,我使用值5、6、7、8添加到数据_总数中

1 5 5
2 5.5 11
3 6 18
5 6.6 33 <--- Bad query occurs here
不幸的是,错误查询没有模式。我曾经做过一些测试,其中所有查询都返回了错误的值,并且像上面的测试一样,除了一个查询之外,其他所有查询都可以正常工作。我注意到的唯一一件事是,如果我在一行中多次使用相同的值,那么每次查询都可以正常工作。此外,如果我多次使用相同的值模式,如上面的示例中所示,我会得到相同的精确输出

我还可以从之前的测试中确认查询本身返回的值不正确,而不是我的数学错误

到目前为止,我已经尝试从表中清空所有值,删除表并重新生成,删除数据库本身并重新生成。没有任何效果

有没有人曾经处理过类似的事情和/或知道我如何解决这个问题


谢谢大家!

没有ORDER BY语句的LIMIT 1查询不能保证每次都有相同的结果。您确定一个$lat,$lon夫妇只能有一行吗

检查此字段是否不返回行:


按纬度从iPhoneTest组中选择*,经度为count*>1,这样看起来它正在工作。我知道我在原帖中的措辞有点混乱,但希望将来有人能用上


结果证明这是Safari的问题。当我在Chrome上运行相同的精确查询时,它会按预期工作。我仍然不知道是Safari引起的,但我可以确认这是一个浏览器问题,而不是代码或数据库问题,因为在Chrome上运行时没有任何更改。

什么是$str,为什么要将它添加到$row['data_total']?@Barmar我误解了这个问题;我删除了我的答案。我不明白这个问题。什么使某件事成为一个糟糕的问题?我也不明白这个问题。您需要向我们展示DB中的内容和预期结果。Barmar所说的关于$str的内容,你还不清楚。我想你有其他人在同时使用这个页面。检查你的日志。此外,如果要更新数据库,请确保使用POST请求。GET请求应该是幂等的,因为浏览器预取或搜索引擎可以随时请求它们。不!不请原谅我在这里大声插话,但这与您的浏览器无关。查询中的错误导致您从MySQL服务器收到不可预测的结果@Laloutre正确地描述了问题。你需要一个ORDERBY子句来配合你的LIMIT子句。不过,我唯一一次看到不可预测的结果是在safari中。如果这是我的查询中的一个错误,为什么它在所有其他浏览器中都工作?@yankees96是否在GET请求中修改数据库?是的。实际上,URL将从iphone应用程序调用。@yankees96是的,不要这样做。我认为你必须使用POST请求。