1
我正在为iOS应用程序编写一个API,并且需要在地理坐标附近获取位置。MySQL查询不在MySQLi中工作,但在MySQL中工作
我在mysqli中试过这个查询,它没有返回任何结果。当我在一个常规的mysql_query中完成时,它完美地工作。我也在phpmyadmin中测试了它的成功完成的查询。
SELECT id, name, address, city, state, longitude, latitude, ($miles * acos(cos(radians($latitude)) * cos(radians(latitude)) * cos(radians(longitude) - radians($longitude)) + sin(radians($latitude)) * sin(radians(latitude)))) AS distance
FROM locations HAVING distance < $distance ORDER BY distance LIMIT 0, 20
这与变量查询填写:
SELECT id, name, address, city, state, longitude, latitude, (3959 * acos(cos(radians(40.735767)) * cos(radians(latitude)) * cos(radians(longitude) - radians(-73.991806)) + sin(radians(40.735767)) * sin(radians(latitude)))) AS distance
FROM locations HAVING distance < 25 ORDER BY distance LIMIT 0, 20
有我丢失的东西,为什么它不会在mysqli
工作?
这是工作MySQL查询代码
mysql_connect('localhost', 'test', 'test') or die(mysql_error());
mysql_select_db('testdb') or die(mysql_error());
$locations = array();
$miles = 3959;
$distance = 25;
$latitude = "40.735767";
$longitude = "-73.991806";
$data = mysql_query("SELECT id, name, address, city, state, longitude, latitude, ($miles * acos(cos(radians($latitude)) * cos(radians(latitude)) * cos(radians(longitude) - radians($longitude)) + sin(radians($latitude)) * sin(radians(latitude)))) AS distance
FROM locations HAVING distance < $distance ORDER BY distance LIMIT 0, 20")
or die(mysql_error());
while ($row = mysql_fetch_assoc($data)) {
array_push($locations, $row);
}
我使用MysqliDb类https://github.com/ajillion/PHP-MySQLi-Database-Class所以应该工作如下
$row = $db->rawQuery("SELECT id, name, address, city, state, longitude, latitude, (? * acos(cos(radians(?)) * cos(radians(latitude)) * cos(radians(longitude) - radians(?)) + sin(radians(?)) * sin(radians(latitude)))) AS distance
FROM locations HAVING distance < ? ORDER BY distance LIMIT 0, 20", array($miles, $latitude, $longitude, $latitude, $distance));
if (count($row) > 0){
// if found, return JSON response
echo json_encode($row[0]);
}
即使当我用我发现mysqli的基本模板,它失败。
$locations = array();
$miles = 3959;
$distance = 25;
$latitude = "40.735767";
$longitude = "-73.991806";
// Connect to database
$link = mysqli_connect('localhost','test','test','testdb');
// Check for Errors
if(mysqli_connect_errno()){
echo mysqli_connect_error();
}
// Prepare Query
$query = "SELECT id, name, address, city, state, longitude, latitude, ($miles * acos(cos(radians($latitude)) * cos(radians(latitude)) * cos(radians(longitude) - radians($longitude)) + sin(radians($latitude)) * sin(radians(latitude)))) AS distance
FROM locations HAVING distance < $distance ORDER BY distance LIMIT 0, 20";
// Escape Query
$query = mysqli_real_escape_string($link,$query);
// Perform Query
if($result = mysqli_query($link,$query)){
// Cycle through results
while($row = mysqli_fetch_object($result)){
array_push($locations, $row);
}
// Free Result Set
mysqli_free_result($result);
}
// Close Connection
mysqli_close($link);
哪里调用mysql和mysqli函数? – AbraCadaver
这个例子没有使'mysql'或'mysqli'调用的代码是没有用的。意思是,这些查询可能100%没有错,但也许你的PHP实现是关闭的。 – JakeGould
取决于您如何查询它。您只向我们展示一行代码。向我们展示您的完整代码。 –