2016-12-15 61 views
-1

嗯,你好。我有這個PHP腳本,這是我的DataTables表的後端進程。下面的代碼:MySQL錯誤:1064模糊錯誤

<?php 
 

 
session_start(); 
 

 
// $username = $_SESSION['username']; 
 

 
if (empty($_SESSION['username'])) { 
 
    session_destroy(); 
 
    header('location:login.php'); 
 
} 
 

 
/* 
 
* Script: DataTables server-side script for PHP and MySQL 
 
* Copyright: 2010 - Allan Jardine, 2012 - Chris Wright 
 
* 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('id', 'date', 'wo_number', 'sheet_no', 'step', 'reg_no', 'start_time', 'finish_time', 'status_shift', 'status_working', 'personnel_name', 'title_WO'); 
 

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

 
/* DB table to use */ 
 
$sTable = "daily_activity_control_card-man"; 
 

 
/* Database connection information */ 
 
// $gaSql['user']  = "root"; 
 
// $gaSql['password'] = ""; 
 
// $gaSql['db']   = "hidden"; 
 
//$gaSql['server']  = "localhost"; 
 

 
$gaSql['user'] = "hidden"; 
 
$gaSql['password'] = "hidden"; 
 
$gaSql['db'] = "hidden"; 
 
$gaSql['server'] = "localhost"; 
 

 

 
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
 
* If you just want to use the basic configuration for DataTables with PHP server-side, there is 
 
* no need to edit below this line 
 
*/ 
 

 
/* 
 
* Local functions 
 
*/ 
 
function fatal_error($sErrorMessage = '') 
 
{ 
 
    header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error'); 
 
    die($sErrorMessage); 
 
} 
 

 

 
/* 
 
* MySQL connection 
 
*/ 
 
if (!$gaSql['link'] = mysql_pconnect($gaSql['server'], $gaSql['user'], $gaSql['password'])) { 
 
    fatal_error('Could not open connection to server'); 
 
} 
 

 
if (!mysql_select_db($gaSql['db'], $gaSql['link'])) { 
 
    fatal_error('Could not select database '); 
 
} 
 

 

 
/* 
 
* 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++) { 
 
     if (isset($_GET['bSearchable_' . $i]) && $_GET['bSearchable_' . $i] == "true") { 
 
      $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]) . "%' "; 
 
    } 
 
} 
 

 
/* 
 
* SQL queries 
 
* Get data to display 
 
*/ 
 

 

 
$sQuery = " SELECT a.*, b.personnel_name, c.title_WO FROM `daily_activity_control_card-man` as a INNER JOIN `personnel_master_data` as b ON a.reg_no = b.reg_no INNER JOIN `work_order` as c on a.wo_number = c.wo_number 
 
     $sOrder 
 
     $sLimit 
 
    "; 
 
$rResult = mysql_query($sQuery, $gaSql['link']) or fatal_error('MySQL Error: ' . mysql_errno()); 
 

 
/* Data set length after filtering */ 
 
$sQuery = " 
 
     SELECT FOUND_ROWS() 
 
    "; 
 
$rResultFilterTotal = mysql_query($sQuery, $gaSql['link']) or fatal_error('MySQL Error: ' . mysql_errno()); 
 
$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 fatal_error('MySQL Error: ' . mysql_errno()); 
 
$aResultTotal = mysql_fetch_array($rResultTotal); 
 
$iTotal = $aResultTotal[0]; 
 

 

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

 
while ($aRow = mysql_fetch_array($rResult)) { 
 
    $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); 
 
?>

我得到MySQL Error: 1064,當我嘗試運行PHP文件,該文件並沒有給我我需要的數據顯示,以我的數據表JSON響應。

任何人都可以幫助我嗎?

謝謝。

+0

http://stackoverflow.com/a/23515348/731962的可能的複製別名 –

+0

您的迴音SQL,你會發現實際上有什麼錯誤 – Rahul

+0

@J_D我知道了,我已經閱讀過這篇文章,並且一遍又一遍地做,但仍然沒有運氣,這就是爲什麼我決定做這個帖子 –

回答

2

錯誤1064說你的SQL語法有錯誤。

嘗試在表名稱周圍添加反引號(`)。我相信MySQL會允許你在表名中使用破折號( - ),但是在引用表名時你必須引用表名,否則你會得到一個SQL語法錯誤。

$sQuery = " 
    SELECT COUNT(" . $sIndexColumn . ") 
    FROM `$sTable` 
"; 
+0

是的!正確。我不知道MySQL中的這種規則,謝謝它的作用。我會在4分鐘內接受這個答案。 –

+0

謝謝!我是新來的。需要點。 –

0

我認爲當你更換「$ sOrder」,您不使用的列名

+0

$ sOrder是一個函數,不僅僅是列名的變量或別名,函數本身就是DataTables的相關函數。所以sOrder和sLimit函數都沒有任何問題。 –

+0

但是您在$ sQuery =「SELECT a。*,b.personnel_name,c.title_WO FROM'daily_activity_control_card-man'中使用了INNER JOIN'personnel_master_data'作爲b ON a.reg_no = b.reg_no INNER JOIN'work_order' as c on a.wo_number = c.wo_number $ sOrder $ sLimit 「; – user7283402

+0

是的,我在查詢中使用了$ sOrder和$ sLimit。但是,如果您閱讀我的所有代碼,則$ sOrder和$ sLimit函數已經聲明爲: /* *尋呼 */ $ sLimit =「」; 如果(isset($ _ GET [ 'iDisplayStart'])&& $ _GET [ 'iDisplayLength']!= '-1'){ blablabla } /* *訂購 */ $ sOrder = 「」 ; (isset($ _GET ['iSortCol_0'])){ blablabla } –