title: jQuery Datatables Returning Null values
body: <p>I've modified the example datatables server side PHP code to include inner joins. </p>
  
  <p>I'm a little bit confused as it returns the rows (correct amount of results) but all of the fields are blank/null. But if I use the search to filter values that I KNOW are in the database e.g. theres only one row containing "dave" searching for dave does only return one row, but all of the values are blank/null!!!! </p>
  
  <p>Please help... Here's the PHP as you can see I've editted the $sQuery function to include inner joins.</p>
  
  <pre><code>&lt;?php
      /*
       * Script:    DataTables server-side script for PHP and MySQL
       * Copyright: 2010 - Allan Jardine
       * License:   GPL v2 or BSD (3-point)
       */
  
      /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
       * Easy set variables
       */
  
      /* Array of database columns which should be read and sent back to DataTables. Use a space where
       * you want to insert a non-database field (for example a counter or static image)
       */
      $aColumns = array( 'log.id', 'assets.assetcode', 'engineers.name', 'log.shift', 'log.datetime', 'log.stop_production', 'log.furtheractions', 'log.job_complete', 'log.duration' );
  
      /* Indexed column (used for fast and accurate table cardinality) */
      $sIndexColumn = "id";
  
      /* DB table to use */
      $sTable = "log";
      /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
       * If you just want to use the basic configuration for DataTables with PHP server-side, there is
       * no need to edit below this line
       */
  
      /* 
       * MySQL connection
       */
      $gaSql['link'] =  mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password']  ) or
          die( 'Could not open connection to server' );
  
      mysql_select_db( $gaSql['db'], $gaSql['link'] ) or 
          die( 'Could not select database '. $gaSql['db'] );
  
  
      /* 
       * Paging
       */
      $sLimit = "";
      if ( isset( $_GET['iDisplayStart'] ) &amp;&amp; $_GET['iDisplayLength'] != '-1' )
      {
          $sLimit = "LIMIT ".mysql_real_escape_string( $_GET['iDisplayStart'] ).", ".
              mysql_real_escape_string( $_GET['iDisplayLength'] );
      }
  
  
      /*
       * Ordering
       */
      if ( isset( $_GET['iSortCol_0'] ) )
      {
          $sOrder = "ORDER BY  ";
          for ( $i=0 ; $i&lt;intval( $_GET['iSortingCols'] ) ; $i++ )
          {
              if ( $_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true" )
              {
                  $sOrder .= $aColumns[ intval( $_GET['iSortCol_'.$i] ) ]."
                      ".mysql_real_escape_string( $_GET['sSortDir_'.$i] ) .", ";
              }
          }
  
          $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 ( $_GET['sSearch'] != "" )
      {
          $sWhere = "WHERE (";
          for ( $i=0 ; $i&lt;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&lt;count($aColumns) ; $i++ )
      {
          if ( $_GET['bSearchable_'.$i] == "true" &amp;&amp; $_GET['sSearch_'.$i] != '' )
          {
              if ( $sWhere == "" )
              {
                  $sWhere = "WHERE ";
              }
              else
              {
                  $sWhere .= " AND ";
              }
              $sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' ";
          }
      }
  
  
      /*
       * SQL queries
       * Get data to display
       */
      $sQuery = "
          SELECT SQL_CALC_FOUND_ROWS
  log.id,
  assets.assetcode,
  engineers.name,
  log.shift,
  log.datetime,
  log.stop_production,
  log.furtheractions,
  log.job_complete,
  log.duration
  FROM log
  INNER JOIN assets ON log.asset = assets.id
  INNER JOIN engineers ON log.engineer = engineers.id
          $sWhere
          $sOrder
          $sLimit
      ";
      $rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());
  
      /* Data set length after filtering */
      $sQuery = "
          SELECT FOUND_ROWS()
      ";
      $rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());
      $aResultFilterTotal = mysql_fetch_array($rResultFilterTotal);
      $iFilteredTotal = $aResultFilterTotal[0];
  
      /* Total data set length */
      $sQuery = "
          SELECT COUNT(".$sIndexColumn.")
          FROM   $sTable
      ";
      $rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());
      $aResultTotal = mysql_fetch_array($rResultTotal);
      $iTotal = $aResultTotal[0];
  
  
      /*
       * Output
       */
      $output = array(
          "sEcho" =&gt; intval($_GET['sEcho']),
          "iTotalRecords" =&gt; $iTotal,
          "iTotalDisplayRecords" =&gt; $iFilteredTotal,
          "aaData" =&gt; array()
      );
  
      while ( $aRow = mysql_fetch_array( $rResult ) )
      {
          $row = array();
          for ( $i=0 ; $i&lt;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 );
  ?&gt;
  </code></pre>
  
  <p>And <a href="http://i.stack.imgur.com/8j6bt.png" rel="nofollow">here's</a> <a href="http://i.stack.imgur.com/BJFdN.png" rel="nofollow">some</a> screenshots of the resulting html page and a screenshot of the content in the table.</p>