作者ireullin (raison detre)
看板PHP
標題Re: [請益] codeigniter跟資料庫取資料時會報錯
時間Tue Jul 2 06:48:50 2013
我根據版友建議使用了var_dump查看資料內容
內容是正確的
array(31) { [0]=> object(stdClass)#18 (2) { ["specialty_id"]=> string(1) "1"
["specialty_name"]=> string(9) "小兒科" } [1]=> object(stdClass)#19 (2) {
["specialty_id"]=> string(1) "2" ["specialty_name"]=> string(15) "心臟血管科"
} [2]=> object(stdClass)#20 (2) { ["specialty_id"]=> string(1) "3"
["specialty_name"]=> string(15) "代謝內分泌" } ....後面省略
我將比較完整的錯誤資訊與程式碼貼上來
再請大家給我點意見
錯誤訊息
A PHP Error was encountered
Severity: Notice
Message: Undefined offset: 31
Filename: controllers/specialty.php
Line Number: 61
A PHP Error was encountered
Severity: Notice
Message: Trying to get property of non-object
Filename: controllers/specialty.php
Line Number: 61
A PHP Error was encountered
Severity: Notice
Message: Undefined offset: 31
Filename: controllers/specialty.php
Line Number: 62
A PHP Error was encountered
Severity: Notice
Message: Trying to get property of non-object
Filename: controllers/specialty.php
Line Number: 62
A PHP Error was encountered
Severity: Notice
Message: Undefined offset: 31
Filename: controllers/specialty.php
Line Number: 63
A PHP Error was encountered
Severity: Notice
Message: Trying to get property of non-object
Filename: controllers/specialty.php
Line Number: 63
以下為controller的程式碼
發生錯誤的61-63是for($i=0; $i<$page_rows; $i++) 中間的內容
public function show($page=1)
{
$this->VerifyAndReturnLogin();
echo $this->load->view('v_header','',true);
echo $this->load->view('v_menu','',true);
echo $this->draw_content($page);
echo $this->load->view('v_footer','',true);
}
private function draw_content($page)
{
$this->load->model('SpecialtyModel');
$query = $this->SpecialtyModel->selectAll();
$row = $query->result();
$cnt = $query->num_rows();
var_dump($row);
$page_rows = 50; // 每頁幾行
$final = ($cnt%$page_rows)==0?
intval($cnt/$page_rows):intval($cnt/$page_rows)+1;
$next = $page==$final?$page:$page+1;
$last = $page==1?$page:$page-1;
$arrlink = array();
array_push($arrlink, '<a href="' . site_url("/specialty/show/1") .'">第一頁
</a> ');
array_push($arrlink, '<a href="' . site_url("/specialty/show/$last") .'">上一
頁</a> ');
array_push($arrlink, '<select onchange="window.location=this.value;" >');
for($i=1; $i<=$final; $i++)
{
if($i==$page) array_push($arrlink, '<option selected
value="'.site_url("/specialty/show/$i")."\" >第 $i 頁</option>");
else array_push($arrlink, '<option
value="'.site_url("/specialty/show/$i")."\" >第 $i 頁</option>");
}
array_push($arrlink, "</select> ");
array_push($arrlink, '<a href="' . site_url("/specialty/show/$next") .'">下一
頁</a> ');
array_push($arrlink, '<a href="' . site_url("/specialty/show/$final").'">最後
一頁</a> ');
$this->load->library('table');
$this->table->set_template(array('table_open'=>'<table
class="CLS_SHOWTABLE">'));
$this->table->set_heading('edit', 'specialty_id','醫療科別' );
for($i=0; $i<$page_rows; $i++)
{
$index = ($page-1)*$page_rows+$i;
$this->table->add_row(
'<a href="' . site_url('specialty/edit/' . $row[$index]->specialty_id ).
'">編輯</a> <a href="' . site_url('specialty/delete/' .
$row[$index]->specialty_id) . '">移除</a>',
$row[$index]->specialty_id,
$row[$index]->specialty_name
);
}
$table = $this->table->generate();
$html = array(
"<h2>specialty</h2>",
"<hr />",
implode($arrlink) . ' <a href="'. site_url('specialty/edit') .
'">新增一筆資料</a>',
$table,
implode($arrlink)
);
return implode($html);
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.85.131.202
1F:→ liaosankai:從錯誤訊息來看,似乎是索引多了1,foreach也這樣嗎? 07/02 08:19
2F:→ liaosankai:從你的var_dump出來的array(31),所以最終索引應該是30 07/02 08:20
3F:→ ireullin:是的....foreach也是一樣的錯誤訊息 07/02 09:09
4F:→ ireullin:是否有可能result的結果被gc提前回收 07/02 09:09
5F:→ ireullin:若有可能....是否有方法去朝這方向偵錯 07/02 09:10
6F:→ ireullin:$index的計算邏輯寫錯了,造成溢出陣列 07/02 09:43
7F:→ ireullin:讓大家麻煩了,真不好意思 07/02 09:43