2010-09-24 95 views
0

我想使我的表可以在每列中过滤。我从DataTable.net获得客户端脚本。为了做到这一点,我必须在服务器端脚本中修改这个数据表。我的表格字段是:行,型号名称,版本,批号,序列号,ID号,批号_序列号和产品日期。datatable:使服务器端脚本过滤每列

我试图将每列同步到这个服务器脚本,但我总是得到一个错误。 这下面的脚本:

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

我在这个查询得到错误:

error: "Error occuered during query execution:(): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND Line LIKE '2' ORDER BY Model_name desc LIMIT 0, 10' at line 1";

回答

0

你必须链查询。
,而你与每个其他条件替代$ sWhere
你可以使用串联(.= 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); 

这段代码的最后一行将打印出来,不仅错误消息,但也查询本身,这将是非常有益的

+0

谢谢我错过了concat。 – klox 2010-09-25 02:33:29

1

WHERE * LIKE不正确。

您需要提供到位的*

有效的列名和PHP语法错误,是因为:

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

缺少一个)关闭mysql_real_escape_string function CAL

+0

我是否必须提及的所有领域? – klox 2010-09-24 09:29:02

+0

没有..这是行不通的。你必须为一个like子句指定一个列名。 – codaddict 2010-09-24 09:33:08

+0

okey..data可以显示但不能过滤数据。并显示错误:附近'和线样'2'命令模型名称desc极限0,10'在第1行“ – klox 2010-09-24 10:07:32

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']."%' "; 
    } 
    
+0

我发现了另一个问题 – klox 2010-09-24 10:10:18