2012-05-21 31 views
0
$query = "SELECT *, ((ACOS(SIN($lat * PI()/180) * SIN(lat * PI()/180) + COS($lat * PI()/180) * COS(lat * PI()/180) * COS(($lon - lon) * PI()/180)) * 180/PI()) * 60 * 1.1515) AS distance 
      FROM average_temp 
      HAVING distance<=25 
      ORDER BY distance ASC limit 1"; 

我可以不運行在phpMyAdmin任何問題,上面的查詢失敗,但失敗的,如果我運行它通過我的PHP文件的時間大約20%。查詢在PHP文件,但從來沒有在phpMyAdmin

這是與查詢結果交易代碼:時間

if (!$query){ 
    die ("Query failed: " . mysql_error()); 
} 
$result = mysqli_query($db, $query); 
$num_results = mysqli_num_rows($result); 
$row = mysqli_fetch_assoc($result); 
$var = $row['id']; 

80%,它的偉大工程和其他20它掛30秒,並拋出這個錯誤:

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\wamp\w

我正在做的是從另一個表中獲取緯度和經度值,並用這張表引用它們。該公式在找到給定距離內的位置時起到了一種魅力。我把它設置在25英里,只想要最接近的比賽,但你可以改變它給你最近的#個位置。我發現查詢here

任何想法我可能做錯了什麼?

+0

你的數據庫的大小是多少?查詢在phpmyadmin中運行多長時間? – yankee

+0

通過myadmin顯示行0 - 0(總計1次,查詢花費0.0006秒)兩張表都有大約7,000行,每行10列 – whatdafrak

回答

2

首先,您不是測試查詢的結果,而是查詢字符串本身。它應該是這樣的:

$result = mysqli_query($db, $query); 
if ($result === false){ 
    die ("Query failed: " . mysql_error()); 
} 
$num_results = mysqli_num_rows($result); 
$row = mysqli_fetch_assoc($result); 
$var = $row['id']; 

這樣,你應該從MySQL獲得適當的錯誤報告,我猜超時,因爲它掛起30秒。

+1

正是如此。正準備寫同樣的東西,打我。 – eis

+0

只是返回「查詢失敗:」沒有給出mysql錯誤 – whatdafrak

+2

如果您使用的是mysql * i * _query,那麼您還應該使用mysql * i * _error() – yankee

0

如果$ lat或$ lon爲空或未定義,則查詢可能失敗。 在發送查詢之前檢查它們。

+0

感謝您的回覆。 DaveRandom在你做之前就明白了。我認爲這是我的公式,但是這是$ lat和$ lon未定義。再次感謝。 – whatdafrak

相關問題