datatable: сделать серверный скрипт для фильтрации каждого столбца

0

Я хочу, чтобы моя таблица могла фильтроваться в каждом столбце. я получаю клиентскую сторону script из DataTable.net. Чтобы выполнить эту работу, я должен внести изменения на стороне сервера script для этого типа данных. Мои поля таблицы: Line, Model_name, Version, Lot, Serial_number, ID_number, Lot_no_S_Serial и Prod_date.

Я попытался синхронизировать каждый столбец с этим сервером script, но всегда получаю сообщение об ошибке. это следующий script:

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, для правильного синтаксиса для использования рядом с" И ЛИНИИ LIKE "2" ORDER BY Название модели                 desc LIMIT 0, 10 'в строке 1 ";

Теги:
filter
datatable
server-side

3 ответа

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
    спасибо я пропустил конкат
1

WHERE * LIKE неверно.

Вам нужно указать действительное имя столбца вместо *

И синтаксическая ошибка PHP заключается в следующем:

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

отсутствует ), чтобы закрыть mysql_real_escape_string function cal

  • 0
    Должен ли я упомянуть все поля?
  • 0
    нет .. это не работает .. вы должны указать одно имя столбца для одного предложения like.
Показать ещё 1 комментарий
1

У вас есть несколько ошибок:

  • Я сомневаюсь, что "* LIKE" является синтаксисом SQL. Здесь вы должны указать одно имя поля. Если postVar ('sSearch') равно ", вы также не сможете добавить запрос" WHERE" к вашему запросу.

    if (postVar('sSearch') !="" )
    {
             $sWhere = " WHERE * LIKE '%".mysql_real_escape_string( $_POST['sSearch'] )."%'  ";
    }
    
  • У вас отсутствует закрывающая паратетегия после mysql_real_escape_string (..

    if (postVar('sSearch_0') !="")
    {
            $sWhere = " AND Line LIKE '%".mysql_real_escape_string( $_POST['sSearch_0']."%' ";
    }
    
  • 0
    я нашел другую проблему

Ещё вопросы

Сообщество Overcoder
Наверх
Меню