datatable:make服务器端脚本,用于过滤每列

时间:2010-09-24 09:23:26

标签: php mysql datatable filter server-side

我想让我的表可以在每列中进行过滤。我从DataTable.net获得客户端脚本。为了使这项工作,我必须在服务器端脚本中为此数据表进行更改。我的表字段是:Line,Model_name,Version,Lot,Serial_number,ID_number,Lot_no_S_Serial和Prod_date。

我试图将每个列同步到此服务器脚本,但我总是收到错误。 这个脚本如下:

sSearch:
bEscapeRegex:true
sSearch_0:
bEscapeRegex_0:true
bSearchable_0:true
sSearch_1:
bEscapeRegex_1:true
bSearchable_1:true
sSearch_2:
bEscapeRegex_2:true
bSearchable_2:true   //data array same until sSearch_7

修改

这个查询:

$sWhere = "";
if (postVar('sSearch') !="" )
{
  $sWhere = " WHERE Line LIKE '%".mysql_real_escape_string( $_POST['sSearch'] )."%'  ";
}
if (postVar('sSearch_0') !="")
{
  $sWhere = " AND Line LIKE '".mysql_real_escape_string( $_POST['sSearch_0'])."' ";
}
if (postVar('sSearch_1') !="") 
{ 
  $sWhere = " AND Model_name LIKE '%".mysql_real_escape_string( $_POST['sSearch_1'])."%' ";

//直到sSearch_7

我在这个查询中收到错误:

  

错误:“在查询执行期间出错:():您的SQL语法出错;请查看与您的MySQL服务器版本对应的手册,以便在”AND LINE LIKE“附近使用正确的语法2'ORDER BY型号名称                   desc LIMIT 0,10'在第1行“;

3 个答案:

答案 0 :(得分:1)

WHERE * LIKE不正确。

您需要提供有效的列名来代替*

PHP语法错误是因为:

$sWhere = " AND Line LIKE '%".mysql_real_escape_string( $_POST['sSearch_0']."%' ";

缺少)以关闭mysql_real_escape_string function cal

答案 1 :(得分:1)

您的代码有几个错误:

  1. 我怀疑“* LIKE”是有效的SQL语法。您应该在此处定义单个字段名称。如果postVar('sSearch')等于“”,您也无法在查询中添加“WHERE”。

    if (postVar('sSearch') !="" )
    {
             $sWhere = " WHERE * LIKE '%".mysql_real_escape_string( $_POST['sSearch'] )."%'  ";
    }
    
  2. 在mysql_real_escape_string(..

    之后,你错过了一个关闭的paranthesis
    if (postVar('sSearch_0') !="")
    {
            $sWhere = " AND Line LIKE '%".mysql_real_escape_string( $_POST['sSearch_0']."%' ";
    }
    

答案 2 :(得分:0)

你必须链接你的查询 当你用每个进一步的条件替换$ s 你可以使用连接(.= instead of =),但我建议使用数组:

$aWhere = array();
if (postVar('sSearch')) {
  $aWhere[] = "Line LIKE '%".mysql_real_escape_string( $_POST['sSearch'] )."%'";
}
if (postVar('sSearch_0'))
{
  $aWhere[] = "Line LIKE '".mysql_real_escape_string($_POST['sSearch_0'])."'";
}
if (postVar('sSearch_1')) 
{ 
  $aWhere = "Model_name LIKE '%".mysql_real_escape_string( $_POST['sSearch_1'])."%'";
}
//and so on
if (count($aWhere)) $where="WHERE ".implode(' AND ',$aWhere);
$query="select * from table $where";
mysql_query($query) or trigger_error(mysql_error().": ".$query);

此代码的最后一行不仅会打印错误消息,还会打印出非常有用的查询本身