我想让我的表可以在每列中进行过滤。我从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行“;
答案 0 :(得分:1)
WHERE * LIKE
不正确。
您需要提供有效的列名来代替*
PHP语法错误是因为:
$sWhere = " AND Line LIKE '%".mysql_real_escape_string( $_POST['sSearch_0']."%' ";
缺少)
以关闭mysql_real_escape_string function
cal
答案 1 :(得分:1)
您的代码有几个错误:
我怀疑“* LIKE”是有效的SQL语法。您应该在此处定义单个字段名称。如果postVar('sSearch')等于“”,您也无法在查询中添加“WHERE”。
if (postVar('sSearch') !="" )
{
$sWhere = " WHERE * LIKE '%".mysql_real_escape_string( $_POST['sSearch'] )."%' ";
}
在mysql_real_escape_string(..
之后,你错过了一个关闭的paranthesisif (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);
此代码的最后一行不仅会打印错误消息,还会打印出非常有用的查询本身