2013-02-07 62 views
2

我運行一個PHP腳本以下查詢:PHP/MySQL的缺失的行上查詢

$radius_query = "SELECT zip, (3959 * acos(cos(radians(" . $latitude .")) * cos(  radians(lat)) * cos(radians(lng) - radians(" . $longitude . ")) + sin(radians(" .  $latitude .")) * sin(radians(lat)))) AS distance 
FROM ZIP HAVING distance < ". $radius; 
$radius_result = $db_zipcode->query($radius_query); 


if (!$radius_result){ 
    echo 'Could not run query: ' . mysql_error(); 
    exit; 
    } 

$row = $radius_result->fetch(PDO::FETCH_ASSOC); 

    While($row = $radius_result->fetch(PDO::FETCH_ASSOC)) 
{ 
    $zip[] = $row['zip']; 
} 


foreach ($zip as $zip_display){ 
echo $zip_display . ", " . ''; 
}  

本身的工作原理與一個小錯誤查詢 - 它不會返回數據的第一行。它應該返回一個郵政編碼列表與此類似:

40324,40339,40340,40347,40356 ...

這是結果我得到當我運行在phpMyAdmin相同的查詢。

但是,當我在PHP腳本中運行上述查詢時,結果集以40339開頭,然後包含所有剩餘的郵政編碼。它不是一個里程問題(即缺少的zip在半徑範圍內 - 就像我在phpMyAdmin中運行查詢時顯示的那樣)。

我在錯誤的PHP查詢中錯過了第一行數據?它不僅僅是一個顯示問題,因爲當我將查詢結果插入到數據庫中時,它也會丟失第一行。

謝謝!

+0

你在列表中獲得'40339',所以也許是訂單或? –

回答

2

問題是在第一fetch,他們把你的第一行...... 運行此不 $row = $radius_result->fetch(PDO::FETCH_ASSOC); 我有同樣的問題大約一天前。

+0

感謝所有快速響應 - 消除了第一次獲取工作。 – user1991642

1

沒有必要做在PHP中隱含的循環,嘗試

$zip = $radius_result->fetchAll(PDO::FETCH_ASSOC); 
+2

要放大一點 - 代碼中的確切錯誤是'fetch()'在循環開始之前被稱爲額外時間。使用fetchAll()更好。 – Jerry

+0

傑裏是正確的,對不起,我應該澄清 – Martin

+0

這是代碼中的替代? – user1991642