Я хочу, чтобы моя таблица могла фильтроваться в каждом столбце. я получаю клиентскую сторону 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 ";
вам нужно связать свои запросы.
в то время как вы заменяете $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);
последняя строка этого кода выведет не только сообщение об ошибке, но и сам запрос, который будет чрезвычайно полезен
WHERE * LIKE
неверно.
Вам нужно указать действительное имя столбца вместо *
И синтаксическая ошибка PHP заключается в следующем:
$sWhere = " AND Line LIKE '%".mysql_real_escape_string( $_POST['sSearch_0']."%' ";
отсутствует )
, чтобы закрыть mysql_real_escape_string function
cal
У вас есть несколько ошибок:
Я сомневаюсь, что "* 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']."%' ";
}