2014-03-03 40 views
0

我以codeigniter開頭,並且遇到數據庫查詢問題。 如果我在標準的PHP代碼中運行查詢,它會顯示查詢中傳遞的所有數據,但如果我使用codeigniter運行查詢,則只會顯示一行foreach。codeigniter - foreach查詢不起作用

在Model:

$query = $this->db->query('select C.display_name AS "Servicio", B.output AS "Status",  B.last_time_ok AS "Ultimo OK" , B.last_time_critical AS "Ultimo Critical" 
from system_hosts  AS A 
INNER JOIN system_services AS C ON C.host_object_id = A.host_object_id 
INNER JOIN  system_servicestatus AS B ON B.service_object_id = C.service_object_id 
WHERE A.alias =  "'.$hostname.'" GROUP BY C.display_name;');     

return $query->row_array(); 

在視圖:

<?php foreach ($hosts_service as $services): 
    ?> <tr> 
    <h2><td><?php echo $hosts_service['Servicio'] ?></a></td></h2> 
<h2><td><?php echo $hosts_service['Status'] ?></a></td></h2>  
<h2><td><?php echo $hosts_service['Ultimo OK'] ?></a></td></h2>  
<h2><td><?php echo $hosts_service['Ultimo Critical'] ?></a></td></h2> </tr>  
<?php endforeach ?> 

在控制器:

$data['hosts_service'] = $this->news_model->get_service($hostname); 

它retur n相同的值4次,但如果我在正常的PHP中運行,它會返回包含在數據庫中的3個不同的值,所以查詢是正確的。 (我在Toad中嘗試過相同的查詢,結果是OK)。

¿什麼是問題?

非常感謝!

回答

0

通過返回一個row_array(),你只會返回一行。例如:

get_user(user_id) 

這將返回一個結果 - 我正在尋找的用戶。

嘗試使用:

return $query->result(); 

退房Generating Query Results

1

您應該使用的result_array()代替row_array()

嘗試

return $query->result_array(); 

,而不是

return $query->row_array(); 

查看更多信息here

+0

非常感謝Nouphal,你的小費解決了這個問題partialy! Samutz增加了解決方案的其餘部分! – proquibas

0

除了Nouphal.M的回答,你也需要使用項目變量在循環中而不是數組變量。

<?php foreach ($hosts_service as $services): ?> 
<tr> 
    <h2><td><?php echo $services['Servicio'] ?></a></td></h2> 
    <h2><td><?php echo $services['Status'] ?></a></td></h2>  
    <h2><td><?php echo $services['Ultimo OK'] ?></a></td></h2>  
    <h2><td><?php echo $services['Ultimo Critical'] ?></a></td></h2> 
</tr>  
<?php endforeach ?> 

還有一些與您的html無關的問題。 <h2>標籤應該在<td>標籤內。您有一個關閉<a>標記,但沒有打開<a>標記。

+0

謝謝Smautz,兩種解決方案都是正確的! – proquibas