(Codeigniter) jQuery数据表服务器端处理与sql server


(Codeigniter) jQuery datatable server-side processing with sql server

我有一个问题与jQuery数据表,我想使用服务器端处理,因为太多的数据加载。但是从文档中我读到它使用原生php,我使用codeigniter 3。修改代码相当困难。这是我在控制器

中使用的代码
public function dataTable()
{
    $sIndexColumn = "";
    $sTable = "myTable";
    $gaSql['user']       = "test";
    $gaSql['password']   = "t3st";
    $gaSql['db']         = "myDatabase";
    $gaSql['server']     = "Driver={SQL Server Native Client 10.0};Server=ITI-0299-PC'JTSMSSQLSERVER;Port=1326;Database=myDatabase; Uid=test;Pwd=t3st;"; //Locale
    $aColumns = array(
        'id','nmrumahsakit','alamat','kota',
        'provinsi','rawat_inap','rawat_jalan',
        'mcu','telp','fax','latitude',
        'longitude','created_at','updated_at');
    /*
     * ODBC connection
     */
    $connectionInfo = array("UID" => $gaSql['user'], "PWD" => $gaSql['password'], "Database"=>$gaSql['db'],"ReturnDatesAsStrings"=>true);
    $gaSql['link'] = sqlsrv_connect( $gaSql['server'], $connectionInfo);
    $params = array();
    $options =  array( "Scrollable" => SQLSRV_CURSOR_KEYSET );

    /* Ordering */
    $sOrder = "";
    if ( isset( $_GET['iSortCol_0'] ) ) {
            $sOrder = "ORDER BY id  ";
            for ( $i=0 ; $i<intval( $_GET['iSortingCols'] ) ; $i++ ) {
                    if ( $_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true" ) {
                            $sOrder .= $aColumns[ intval( $_GET['iSortCol_'.$i] ) ]."
                                    ".addslashes( $_GET['sSortDir_'.$i] ) .", ";
                    }
            }
            $sOrder = substr_replace( $sOrder, "", -2 );
            if ( $sOrder == "ORDER BY id" ) {
                    $sOrder = "";
            }
    }
    /* Filtering */
    $sWhere = "";
    if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" ) {
            $sWhere = "WHERE (";
            for ( $i=0 ; $i<count($aColumns) ; $i++ ) {
                    $sWhere .= $aColumns[$i]." LIKE '%".addslashes( $_GET['sSearch'] )."%' OR ";
            }
            $sWhere = substr_replace( $sWhere, "", -3 );
            $sWhere .= ')';
    }
    /* Individual column filtering */
    for ( $i=0 ; $i<count($aColumns) ; $i++ ) {
            if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' )  {
                    if ( $sWhere == "" ) {
                            $sWhere = "WHERE ";
                    } else {
                            $sWhere .= " AND ";
                    }
                    $sWhere .= $aColumns[$i]." LIKE '%".addslashes($_GET['sSearch_'.$i])."%' ";
            }
    }
    /* Paging */
    $top = (isset($_GET['iDisplayStart']))?((int)$_GET['iDisplayStart']):0 ;
    $limit = (isset($_GET['iDisplayLength']))?((int)$_GET['iDisplayLength'] ):10;
    $sQuery = "SELECT TOP $limit ".implode(",",$aColumns)."
            FROM $sTable
            $sWhere ".(($sWhere=="")?" WHERE ":" AND ")." $sIndexColumn NOT IN
            (
                    SELECT $sIndexColumn FROM
                    (
                            SELECT TOP $top ".implode(",",$aColumns)."
                            FROM $sTable
                            $sWhere
                            $sOrder
                    )
                    as [virtTable]
            )
            $sOrder";
    $rResult = sqlsrv_query($gaSql['link'],$sQuery) or die("$sQuery: " . sqlsrv_errors());
    $sQueryCnt = "SELECT * FROM $sTable $sWhere";
    $rResultCnt = sqlsrv_query( $gaSql['link'], $sQueryCnt ,$params, $options) or die (" $sQueryCnt: " . sqlsrv_errors());
    $iFilteredTotal = sqlsrv_num_rows( $rResultCnt );
    $sQuery = " SELECT * FROM $sTable ";
    $rResultTotal = sqlsrv_query( $gaSql['link'], $sQuery ,$params, $options) or die(sqlsrv_errors());
    $iTotal = sqlsrv_num_rows( $rResultTotal );
    $output = array(
            "sEcho" => intval($_GET['sEcho']),
            "iTotalRecords" => $iTotal,
            "iTotalDisplayRecords" => $iFilteredTotal,
            "aaData" => array()
    );
    while ( $aRow = sqlsrv_fetch_array( $rResult ) ) {
            $row = array();
            for ( $i=0 ; $i<count($aColumns) ; $i++ ) {
                    if ( $aColumns[$i] != ' ' ) {
                            $v = $aRow[ $aColumns[$i] ];
                            $v = mb_check_encoding($v, 'UTF-8') ? $v : utf8_encode($v);
                            $row[]=$v;
                    }
            }
            If (!empty($row)) { $output['aaData'][] = $row; }
    }
    echo json_encode( $output );
}

:

 $('#datatable2').dataTable({
    "sScrollY": "400px",
    "bProcessing": true,
          "bServerSide": true,
          "sServerMethod": "GET",
          "sAjaxSource": "<?php echo base_url(); ?>mycontroller/mymethod",
          "iDisplayLength": 10,
          "aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]],
          "aaSorting": [[0, 'asc']],
          "aoColumns": [
      { "bVisible": true, "bSearchable": true, "bSortable": true },
      { "bVisible": true, "bSearchable": true, "bSortable": true },
      { "bVisible": true, "bSearchable": true, "bSortable": true }
      ]
  }).fnSetFilteringDelay(700);
    });

,这是视图:

<table id="datatable2" class="table table-bordered table-hover">
            <thead>
              <tr>
                <th>No</th>
                <th>Nama R.S</th>
                <th>Alamat</th>
                <th>Kota</th>
                <th>Provinsi</th>
                <th>Rawat Inap</th>
                <th>Rawat Jalan</th>
                <th>MCU</th>
                <th>No.Telp</th>
                <th>No.Fax</th>
                <th>Latitude</th>
                <th>Longitude</th>
                <th>Created At</th>
                <th>Updated At</th>
                <th>Menu</th>
              </tr>
            </thead>
            <tbody>
            </tbody>
          </table>

测试后,我得到这个错误。

遇到PHP错误

严重性:错误

消息:Call to undefined function sqlsrv_connect()

文件名:控制器/Provider.php

行号:302

回溯:

我已经在config/database.php中使用了连接我的问题是如何在编码器中使用服务器端处理?

上面的问题解决了,但我有新的问题与js。

DataTables warning (table id = 'datatable2'): DataTables warning: JSON无法解析来自服务器的数据。这是由JSON引起的格式错误。

CMIIW

似乎您的PHP安装缺少一个允许您使用sqlsrv_connect函数的扩展。

确保php.ini中加载了php_sqlsrv_XX_ts.dll扩展。