简体   繁体   English

MySQL错误:1064模棱两可的错误

[英]MySQL Error: 1064 the ambiguous error

Well, hello. 好,你好 I have this php script which is the backend process of my DataTables table. 我有这个php脚本,这是我的DataTables表的后端过程。 Here's the code: 这是代码:

 <?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); ?> 

I get MySQL Error: 1064 when I try to run the php file, the file didn't gave me JSON response which I needed to display the data to my DataTables. 我收到MySQL Error: 1064当我尝试运行php文件时,该文件没有给我JSON响应,我需要将数据显示到DataTables中。

Can anyone help me with this? 谁能帮我这个?

Thank you. 谢谢。

Error 1064 says that your SQL syntax has an error. 错误1064表示您的SQL语法有错误。

Try putting backticks (`) around your table name. 尝试在表格名称前后加上反引号(`)。 I believe MySQL will let you use dashes (-) in a table name, but you have to quote the table name when referring to it or you get an SQL syntax error. 我相信MySQL将允许您在表名中使用破折号(-),但是在引用它时必须引用该表名,否则会出现SQL语法错误。

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

我认为当您替换“ $ sOrder”时 ,您没有使用别名作为列名

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM