簡體   English   中英

MySQL查詢無法在MySQLi中使用,但可以在MySQL中使用

[英]MySQL Query not working in MySQLi but works in MySQL

我正在為iOS應用匯總API,並且需要獲取地理位置附近的地理位置。

我在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);

我是否缺少某些東西,為什么它在mysqli中不起作用?

沒有。
mysql和mysqli API都以完全相同的方式運行查詢。

尋找錯別字。 以及其他此類錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM