Re: [請益] codeigniter跟資料庫取資料時會報錯

看板PHP作者 (raison detre)時間12年前 (2013/07/02 06:48), 編輯推噓0(007)
留言7則, 2人參與, 最新討論串2/2 (看更多)
我根據版友建議使用了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>&nbsp;&nbsp;'); array_push($arrlink, '<a href="' . site_url("/specialty/show/$last") .'">上一 頁</a>&nbsp;&nbsp;'); 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>&nbsp;&nbsp;"); array_push($arrlink, '<a href="' . site_url("/specialty/show/$next") .'">下一 頁</a>&nbsp;&nbsp;'); array_push($arrlink, '<a href="' . site_url("/specialty/show/$final").'">最後 一頁</a>&nbsp;&nbsp;'); $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) . '&nbsp;&nbsp;<a href="'. site_url('specialty/edit') . '">新增一筆資料</a>', $table, implode($arrlink) ); return implode($html); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.85.131.202

07/02 08:19, , 1F
從錯誤訊息來看,似乎是索引多了1,foreach也這樣嗎?
07/02 08:19, 1F

07/02 08:20, , 2F
從你的var_dump出來的array(31),所以最終索引應該是30
07/02 08:20, 2F

07/02 09:09, , 3F
是的....foreach也是一樣的錯誤訊息
07/02 09:09, 3F

07/02 09:09, , 4F
是否有可能result的結果被gc提前回收
07/02 09:09, 4F

07/02 09:10, , 5F
若有可能....是否有方法去朝這方向偵錯
07/02 09:10, 5F

07/02 09:43, , 6F
$index的計算邏輯寫錯了,造成溢出陣列
07/02 09:43, 6F

07/02 09:43, , 7F
讓大家麻煩了,真不好意思
07/02 09:43, 7F
文章代碼(AID): #1HqWTLNR (PHP)
文章代碼(AID): #1HqWTLNR (PHP)