2013-09-27 107 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"; 
}