Проблема при создании данных с помощью codeigniter

Я пытаюсь создать Datatable с помощью CodeIgniter, используя эти файлы .

В data.php (controller), который я переименовал в datatable.php, я добавил «$ this-> getTable ();» в функции index () и заданы только $ aColumns и $ sTable в соответствии с моей потребностью. Никаких других изменений не сделано.

Я запускаю код с помощью этого URL-адреса: «localhost / codeigniter / index.php / datatable» Я новичок в этом, так что я все еще не удалял index.php, и я не использую base_url, поэтому я соответственно внес изменения в index.php во время загрузки скрипты и css. Также я изменил sAjaxSource на datatable / getTable и имя класса на Datatable, поскольку я изменил имя файла.

Основная проблема заключается в том, что выполнение не входит в этот цикл foreach. Оператор echo не выполняется.

foreach($rResult->result_array() as $aRow) { echo '123'; $row = array(); foreach($aColumns as $col) { $row[] = $aRow[$col]; } $output['aaData'][] = $row; } 

И я получаю вывод следующим образом:

 {"sEcho":0,"iTotalRecords":32,"iTotalDisplayRecords":"32","aaData":[]} 

AaData должен отображать 32 записи в формате JSON, но это не так. Я не понимаю, где я ошибаюсь?

Добавлена ​​функция getTable ():

 public function getTable() { $aColumns = array('student_id', 'exam_id', 'subject_id', 'marks_achieved'); /* Indexed column (used for fast and accurate table cardinality) */ $sIndexColumn = "student_id"; // DB table to use $sTable = 'marks'; // $iDisplayStart = $this->input->get_post('iDisplayStart', true); $iDisplayLength = $this->input->get_post('iDisplayLength', true); $iSortCol_0 = $this->input->get_post('iSortCol_0', true); $iSortingCols = $this->input->get_post('iSortingCols', true); $sSearch = $this->input->get_post('sSearch', true); $sEcho = $this->input->get_post('sEcho', true); // Paging if(isset($iDisplayStart) && $iDisplayLength != '-1') { $this->db->limit($this->db->escape_str($iDisplayLength), $this->db->escape_str($iDisplayStart)); } // Ordering if(isset($iSortCol_0)) { for($i=0; $i<intval($iSortingCols); $i++) { $iSortCol = $this->input->get_post('iSortCol_'.$i, true); $bSortable = $this->input->get_post('bSortable_'.intval($iSortCol), true); $sSortDir = $this->input->get_post('sSortDir_'.$i, true); if($bSortable == 'true') { $this->db->order_by($aColumns[intval($this->db->escape_str($iSortCol))], $this->db->escape_str($sSortDir)); } } } if(isset($sSearch) && !empty($sSearch)) { for($i=0; $i<count($aColumns); $i++) { $bSearchable = $this->input->get_post('bSearchable_'.$i, true); // Individual column filtering if(isset($bSearchable) && $bSearchable == 'true') { $this->db->or_like($aColumns[$i], $this->db->escape_like_str($sSearch)); } } } // Select Data $this->db->select('SQL_CALC_FOUND_ROWS '.str_replace(' , ', ' ', implode(', ', $aColumns)), false); $rResult = $this->db->get($sTable); // Data set length after filtering $this->db->select('FOUND_ROWS() AS found_rows'); $iFilteredTotal = $this->db->get()->row()->found_rows; // Total data set length $iTotal = $this->db->count_all($sTable); // Output $output = array( 'sEcho' => intval($sEcho), 'iTotalRecords' => $iTotal, 'iTotalDisplayRecords' => $iFilteredTotal, 'aaData' => array() ); foreach($rResult->result_array() as $aRow) { echo '123'; $row = array(); foreach($aColumns as $col) { $row[] = $aRow[$col]; } $output['aaData'][] = $row; } echo json_encode($output); } 

Что касается кода SQL, я добавил записи вручную в phpmyadmin, не используя запросы.

Любые проблемы в коде SQL?

 CREATE TABLE IF NOT EXISTS `marks` ( `student_id` int(10) NOT NULL, `exam_id` varchar(10) NOT NULL, `subject_id` int(10) NOT NULL, `marks_achieved` int(10) NOT NULL, KEY `student_id` (`student_id`), KEY `exam_id` (`exam_id`), KEY `subject_id` (`subject_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

Создайте таблицу следующим образом:

 CREATE TABLE IF NOT EXISTS `marks` ( `student_id` int(10) unsigned NOT NULL, `exam_id` int(10) unsigned NOT NULL, `subject_id` int(10) unsigned NOT NULL, `marks_achieved` varchar(50) NOT NULL DEFAULT '', PRIMARY KEY (`student_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; INSERT INTO `marks` (`student_id`, `exam_id`, `subject_id`, `marks_achieved`) VALUES (1, 210, 340, 'really good'), (2, 220, 440, 'super'); 

Отредактируйте функцию getTables (), чтобы указать столбцы:

 $aColumns = array('student_id', 'exam_id', 'subject_id', 'marks_achieved'); 

Измените имя из таблицы, отредактировав эту строку:

 $sTable = 'marks'; 

Ваш стол, вероятно, не совсем такой, но у меня не было проблем с тем, чтобы это работало. Вот вывод JSON, который был эхом:

 {"sEcho":0,"iTotalRecords":2,"iTotalDisplayRecords":"2","aaData":[["1","210","340","really good"],["2","220","440","super"]]} 

Измените следующее:

 if(isset($iDisplayStart) && $iDisplayLength != '-1') 

чтобы:

 if(( ! empty($iDisplayStart)) && $iDisplayLength != '-1') 

Он должен быть на линии 35 или около нее.