datatables服务器端使用sql server

时间:2013-06-27 11:44:49

标签: jquery sql-server datatables server-side

好吧,我不知道如何使用jquery datatables服务器端加载php文件。我使用sql server并且已连接。 这是我的HTML代码

<table cellpadding="0" cellspacing="0" border="0" class="display" id="show_unit">
                                <thead>
                                    <tr>
                                        <th>Rendering engine</th>
                                        <th>Browser</th>
                                        <th>Platform(s)</th>
                                        <th>Engine version</th>
                                        <th>CSS grade</th>
                                    </tr>
                                </thead>
                                <tbody>
                                </tbody>
                                <tfoot>
                                    <tr>
                                        <th>Rendering engine</th>
                                        <th>Browser</th>
                                        <th>Platform(s)</th>
                                        <th>Engine version</th>
                                        <th>CSS grade</th>
                                    </tr>
                                </tfoot>
                            </table>

<script>
    $(document).ready(function() {
$("#show_unit").DataTable({
                    "bProcessing": true,
                    "bServerSide": true,
                    "sAjaxSource": "/simda/server_side.php",
                    "iDeferLoading": 57
                });
});

这是我的server_side.php

<?php

    /* Indexed column (used for fast and accurate table cardinality) */
    $sIndexColumn = "id";

    /* DB table to use */
    $sTable = "Ref_Unit";


    include "classes/koneksi.php";
    $kon=new koneksi();
    $conn=$kon->bukaKoneksi();
        $params = array();
    /* 
     * Paging
     */
    $sLimit = "";
    if ( isset( $_GET['iDisplayStart'] ) && $_GET['iDisplayLength'] != '-1' )
    {
        $sLimit = "LIMIT ".intval( $_GET['iDisplayStart'] ).", ".
            intval( $_GET['iDisplayLength'] );
    }


    /*
     * Ordering
     */
    $sOrder = "";
    if ( isset( $_GET['iSortCol_0'] ) )
    {
        $sOrder = "ORDER BY  ";
        for ( $i=0 ; $i<intval( $_GET['iSortingCols'] ) ; $i++ )
        {
            if ( $_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true" )
            {
                $sOrder .= "`".$aColumns[ intval( $_GET['iSortCol_'.$i] ) ]."` ".
                    ($_GET['sSortDir_'.$i]==='asc' ? 'asc' : 'desc') .", ";
            }
        }

        $sOrder = substr_replace( $sOrder, "", -2 );
        if ( $sOrder == "ORDER BY" )
        {
            $sOrder = "";
        }
    }


    /* 
     * Filtering
     * NOTE this does not match the built-in DataTables filtering which does it
     * word by word on any field. It's possible to do here, but concerned about efficiency
     * on very large tables, and MySQL's regex functionality is very limited
     */
    $sWhere = "";
//  if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" )
//  {
//      $sWhere = "WHERE (";
//      for ( $i=0 ; $i<count($aColumns) ; $i++ )
//      {
//          $sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string( $_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 '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' ";
//      }
//  }
    $options = array("Scrollable" => SQLSRV_CURSOR_KEYSET);

    /*
     * SQL queries
     * Get data to display
     */
    $sQuery = "
        SELECT SQL_CALC_FOUND_ROWS `".str_replace(" , ", " ", implode("`, `", $aColumns))."`
        FROM   $sTable
        $sWhere
        $sOrder
        $sLimit
        ";
    $rResult = sqlsrv_query($conn, $sQuery, $params, $options);

    /* Data set length after filtering */
    $sQuery = "
        SELECT FOUND_ROWS()
    ";
    $rResultFilterTotal = sqlsrv_query($conn, $sQuery, $params, $options);
    $aResultFilterTotal = sqlsrv_fetch_array($rResultFilterTotal, SQLSRV_FETCH_ASSOC);
    $iFilteredTotal = $aResultFilterTotal[0];

    /* Total data set length */
    $sQuery = "
        SELECT COUNT(`".$sIndexColumn."`)
        FROM   $sTable
    ";
    $rResultTotal = sqlsrv_query($conn, $sQuery, $params, $options);
    $aResultTotal = sqlsrv_fetch_array($rResultTotal, SQLSRV_FETCH_ASSOC);
    $iTotal = $aResultTotal[0];

    /*
     * Output
     */
    $output = array(
        "sEcho" => intval($_GET['sEcho']),
        "iTotalRecords" => $iTotal,
        "iTotalDisplayRecords" => $iFilteredTotal,
        "aaData" => array()
    );

    while ( $aRow = sqlsrv_fetch_array($rResult, SQLSRV_FETCH_ASSOC) )
    {
        $row = array();
        for ( $i=0 ; $i<count($aColumns) ; $i++ )
        {
            if ( $aColumns[$i] == "version" )
            {
                /* Special output formatting for 'version' column */
                $row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ];
            }
            else if ( $aColumns[$i] != ' ' )
            {
                /* General output */
                $row[] = $aRow[ $aColumns[$i] ];
            }
        }
        $output['aaData'][] = $row;
    }

    echo json_encode( $output );

?>

但是,它不起作用。 我不知道为什么。 请帮帮我,谢谢, 克里斯

0 个答案:

没有答案