2017-02-12 4 views
2

У меня есть код на PHP, и я хочу использовать == operator для поиска только точных терминов, а также поиска не чувствительного к регистру. Первое, что не работает, когда я меняю LIKE на ==.PHP-поиск с использованием == и не чувствителен к регистру

<?php 
$con = mysql_connect('********','********','********'); 
mysql_select_db("********",$con); 

function search_results($keywords){ 
    $returned_results = array(); 
    $where =""; 

    $keywords = preg_split('/[\s]+/',$keywords); 
    $total_keywords = count($keywords); 

    foreach($keywords as $key=>$keyword){ 
     $where .= "`keywords` LIKE '%$keyword%'"; 
     if($key != ($total_keywords -1)){ 
      $where .=" AND "; 
     } 
    } 
    $results = "SELECT name, image_url, game_url, alt FROM search_games WHERE $where"; 
    $results_num = ($results =mysql_query($results))? mysql_num_rows($results):0; 
    if($results_num === 0){ 
     return false; 
    } 
    else{ 
     while ($results_row = mysql_fetch_assoc($results)) { 
    $returned_results[] = array(
     'name' => $results_row['name'], 
     'image_url' => $results_row['image_url'], 
     'game_url' => $results_row['game_url'], 
     'alt' => $results_row['alt'] 
    ); 
} 
     return $returned_results; 
    } 
} 
?> 
+0

Пожалуйста начать использовать 'mysqli_' или' PDO' как ' mysql_' устарел и удален в PHP7 – SuperDJ

ответ

0

Вы могли бы заменить Еогеасп следующим кодом:

foreach($keywords as $key=>$keyword){ 
    $keyword = strtoupper($keyword); 
    $where .= "upper(`keywords`) = '$keyword'"; 
    if($key != ($total_keywords -1)){ 
     $where .=" AND "; 
    } 
} 

Код выше, делает $keyword строку в верхний регистр, а затем в запросе SQL он сравнивает его с upper(keywords), поэтому они оба являются верхним регистром при сравнении.

Источники:

+0

Я использую решение с более низким. Это решение практически одно и то же, но есть неправильное положение запятой 'upper (keywords)', оно должно быть верхним ('keywords'). Но = оператор не работает. – Catchamouse

+0

Да, вы правы. Спасибо за исправление. Я отредактировал его. Он работает сейчас? – Thanasis

+0

Решение с более низкими работами, но operator = не работает. – Catchamouse

1

Используйте MySql LOWER функция для выполнения incasesensitive поиска:

... 

foreach ($keywords as $key => $keyword) { 
    $keyword = strtolower($keyword); 
    $where .= " LOWER(`keywords`) LIKE '%$keyword%'"; 
    if ($key != ($total_keywords -1)) { 
     $where .= " AND "; 
    } 
}