2013-09-20 3 views
1

У меня есть код и его ответственность за поле поиска для поиска данных в таблице mysql. вопрос его чувствителен к регистру, я посмотрел на сайте автора и где они предлагают перейти от LIKE к ILIKE, однако это вызывает поиск не работаетОшибка поиска в MySQL

/* 
* Filtering 
* NOTE this does not match the built-in DataTables filtering which does it 
* word by word on any field. It's possible to do here, but concerned about efficiency 
* on very large tables, and MySQL's regex functionality is very limited 
*/ 
$sWhere = ""; 
if (isset($_GET['sSearch']) && $_GET['sSearch'] != "") 
{ 
    $sWhere = "WHERE ("; 
    for ($i=0 ; $i<count($aColumns) ; $i++) 
    { 
     if (isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true") 
     { 
      $sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string($_GET['sSearch'])."%' OR "; 
     } 
    } 
    $sWhere = substr_replace($sWhere, "", -3); 
    $sWhere .= ')'; 
} 

/* Individual column filtering */ 
for ($i=0 ; $i<count($aColumns) ; $i++) 
{ 
    if (isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '') 
    { 
     if ($sWhere == "") 
     { 
      $sWhere = "WHERE "; 
     } 
     else 
     { 
      $sWhere .= " AND "; 
     } 
     $sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' "; 
    } 
} 
+0

Вы должны использовать PDO или MySQLi с подготовленными заявлениями вместо функций mysql_, они были устаревшее. – Fredd

+0

http://stackoverflow.com/questions/2876789/case-insensitive-for-sql-like-wildcard-statement – Fredd

+1

Измените таблицу, чтобы использовать сортировку без учета регистра. Стандартные таблицы MySQL (и сравнение) нечувствительны к регистру. Чувствительность к регистру - это то, что вы специально настраиваете для системы. –

ответ

4
/* 
* Filtering 
* NOTE this does not match the built-in DataTables filtering which does it 
* word by word on any field. It's possible to do here, but concerned about efficiency 
* on very large tables, and MySQL's regex functionality is very limited 
*/ 
$sWhere = ""; 
if (isset($_GET['sSearch']) && $_GET['sSearch'] != "") 
{ 
    $sWhere = "WHERE ("; 
    for ($i=0 ; $i<count($aColumns) ; $i++) 
    { 
     if (isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true") 
     { 
      $sWhere .= "UPPER(`".$aColumns[$i]."`) LIKE '%".strtoupper(mysql_real_escape_string($_GET['sSearch']))."%' OR "; 
     } 
    } 
    $sWhere = substr_replace($sWhere, "", -3); 
    $sWhere .= ')'; 
} 

/* Individual column filtering */ 
for ($i=0 ; $i<count($aColumns) ; $i++) 
{ 
    if (isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '') 
    { 
     if ($sWhere == "") 
     { 
      $sWhere = "WHERE "; 
     } 
     else 
     { 
      $sWhere .= " AND "; 
     } 
     $sWhere .= "UPPER(`".$aColumns[$i]."`) LIKE '%".strtoupper(mysql_real_escape_string($_GET['sSearch_'.$i]))."%' "; 
    } 
} 
+0

Это потрясающе сработало! Спасибо :) – user1741397

+0

Большое спасибо, что вы сделали мой день .. –

3
WHERE UPPER(column_name) LIKE '%" . strtoupper(string). "%' 
+0

Где я могу добавить «верхний» в свой код? этот код кажется слишком продвинутым для меня: D – user1741397

1

Если у вас есть регистронезависимое сверку (как правило, это сортировки по умолчанию), тогда ваши поисковые запросы будут по умолчанию нечувствительны к регистру.

+0

не уверен, что я понимаю, что вы имеете в виду ... но, как кажется, его сделали чувствительным к регистру – user1741397

+0

@ user1741397 Какова текущая сортировка для полей, которые вы пытаетесь провести поиск? –

0

Дайте этому попытку:

/* 
* Filtering 
* NOTE this does not match the built-in DataTables filtering which does it 
* word by word on any field. It's possible to do here, but concerned about efficiency 
* on very large tables, and MySQL's regex functionality is very limited 
*/ 
$sWhere = ""; 
if (isset($_GET['sSearch']) && $_GET['sSearch'] != "") 
{ 
    $sWhere = "WHERE ("; 
    for ($i=0 ; $i<count($aColumns) ; $i++) 
    { 
     if (isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true") 
     { 
      $sWhere .= "UCASE(`".$aColumns[$i]."`) LIKE '%UCASE(".mysql_real_escape_string($_GET['sSearch']).")%' OR "; 
     } 
    } 
    $sWhere = substr_replace($sWhere, "", -3); 
    $sWhere .= ')'; 
} 

/* Individual column filtering */ 
for ($i=0 ; $i<count($aColumns) ; $i++) 
{ 
    if (isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '') 
    { 
     if ($sWhere == "") 
     { 
      $sWhere = "WHERE "; 
     } 
     else 
     { 
      $sWhere .= " AND "; 
     } 
     $sWhere .= "UCASE(`".$aColumns[$i]."`) LIKE '%UCASE(".mysql_real_escape_string($_GET['sSearch_'.$i]).")%' "; 
    } 
}