我正在尝试使用these files创建带有CodeIgniter的数据表。
在我重命名为datatable.php的data.php(控制器)中,我添加了“$ this-> getTable();”在函数index()中,根据我的需要只定义了$ aColumns和$ sTable。没有进行其他更改。
我使用以下URL运行代码:“localhost / codeigniter / index.php / datatable” 我是新手,所以仍然没有删除index.php,我不使用base_url所以我在加载脚本和css时相应地对index.php进行了更改。此外,我已经将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应该以JSON格式显示32条记录,但它没有这样做。我不知道我哪里错了?
追加: 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;
答案 0 :(得分:2)
创建如下表格:
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行或附近。