2013-09-27 198 views
-3

我一直有大約2天的錯誤現在我會appreaciate如果有人可以幫助我。從數據庫中獲取數據到一個php數組中

目的: 我要作出這樣的選擇在當月所有付款查詢,並將它們保存在一個數組,我想這個圖表,所以我還需要在沒有付款是做了天。

這是我的代碼,我認爲我的問題是當我嘗試捕獲它們在一個數組中。當我從我的主頁呼叫我的功能時,所有的網站都會關閉。

function getDailyGraph($membership, $selectedMonth){ 
     $sql = "SELECT rate_amount AS payment, DAY(date) AS day FROM payments WHERE membership_id = ".$membership. 
     " AND MONTH(date) = ".$selectedMonth." ORDER BY day"; 
     $query = $db->query($sql); 
     $days = array(); 
     for ($i=1; $i <= 31 ; $i++) { 
     $payment = mysql_fetch_array($query); 
     # code... 
     if ($i == $payment['day']) { 
      # code... 
      $days[] = $payment['payment']; 
     }else{ 
      $days[] = 0; 
     } 
     } 
     return $days; 
    } 
+2

掛一會兒;你使用PDO還是mysql_ *?因爲我在同一個上下文中看到了'$ db-> query($ sql)'和'mysql_fetch_array($ query)'...... –

+0

看看你的錯誤日誌。將$ payment ['dia']更改爲$ payment ['day']。 – jithujose

回答

0

您似乎有一個無限循環;你的$i+1應該是$i+=1$i++,所以你的循環永遠不會完成,這將導致一個頁面永不完成/加載。 e:我發佈的日期太早了。

您的代碼中也存在邏輯錯誤;你正在選擇日子,但無論如何你都在增加;如果僅在第10,15和17日進行支付,則當您的循環在1,2,3時並且它們不可能匹配時,您將用dia 10,15,17拉起三排。

分別進行查詢和日期匹配。

只要從mysql_fetch_array得到結果並存儲結果數組,就執行一個循環;也許在另一天索引,然後循環,並檢查你實際上可用的日子。

+0

好吧謝謝,我認爲我的文本編輯器補充說。不幸的是,錯誤仍然存​​在。還有其他建議嗎? –

+0

事情是我真的希望他們不要匹配當我的循環在1,2,3(以下例子)。我想在我的循環結尾有31個數字的數組。因爲當我繪製它們時,我需要31點來繪製整個月的圖形。所以如果我的循環是1,它會在我的數組中保存一個0,我會在圖表中顯示「10月第一次」沒有付款。這種方式還錯嗎? –

+0

是的,它仍然是錯誤的,你有它。 –

0

首先,如果你使用的是PDO,你的代碼應該是這樣

$sql = 'SELECT rate_amount AS payment, DAY(date) AS day FROM payments WHERE membership_id = ".$membership." AND MONTH(date) = ".$selectedMonth." ORDER BY day'; 
foreach ($db->query($sql) as $payment) { 
    //do something with $payment['dia'], $payment['payment'], etc...  
} 

如果您正在使用mysl_ *功能,您應該考慮mysqli_ *和你的代碼應該看起來像

$sql = 'SELECT rate_amount AS payment, DAY(date) AS day FROM payments WHERE membership_id = ".$membership." AND MONTH(date) = ".$selectedMonth." ORDER BY day'; 

/* connection to database */ 
$link = mysqli_connect("localhost", "my_user", "my_password", "my_database"); 

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

/* Select */ 
if ($result = mysqli_query($link, $sql)) { 
    //work with your data here 
    while($row = mysqli_fetch_array($result)){ 
     //do something with $payment['dia'], $payment['payment'], etc... 
    } 

    //free memory 
    mysqli_free_result($result); 
}else{ 
    echo "Error in query"; 
}