2011-01-13 6 views
1

고객 사이트에 작은 AJAX 기능을 추가하라는 메시지가 표시되었습니다. 기본적으로 나는 3 개 필드 MySQL의 테이블이 있습니다공간 나누기 MySQL 문자열 검색

  • ID
  • 제품
  • 이름

을 사이트의 아이디어는 사용자가 "이름"을 입력 시작하고 제품이다 몇 번의 키 입력 후에 나타납니다. 내 쿼리는 다음과 같습니다.

$query = mysql_query("SELECT product FROM mytable WHERE name LIKE '%".$search."%'"); 

"이름"에 공백이있는 경우를 제외하고는 모두 작동합니다. 예를 들어 "Coca Cola"라는 이름이 있으면 "Coca"를 입력하면 스크립트가 제품을 나열하지만 공간을 입력하자마자 더 이상 행을 반환하지 않습니다.

저는 어디에서나 해결책을 찾았습니다. 나는 그 공간이 어떤 종류의 분리 자로 해석된다는 것을 이해하지만, 공간을 ... 음 ... 공간으로 해석 할 수있는 데이터베이스를 얻을 수 있습니까? 그렇지 않다면, 내가 성취하고자하는 일을하는 더 좋은 방법이 있습니까?

편집 :

나는 phpMyAdmin에 그것을 실행하고 실제로는 PHP에서 뭔가해야한다고 생각하는 날 리드 올바른 결과를 반환합니다. 전체 스크립트를 프로그래머 : 당신은 문자의 허용 목록에서 공백을 제외하고 같은

$search = $_GET['search']; 
$already_echoed = array(); 

if (!ereg('[^A-Za-z0-9]', $search) && strlen($search) > 2) { 

$query = mysql_query("SELECT product FROM mytable WHERE name LIKE '%".$search."%'"); 

if (mysql_num_rows($query) > 0) { 

    echo '<h4>Suggestions:</h4><ul>'; 

    while ($product = mysql_fetch_array($query)) { 

    if (!in_array($product['product'], $already_echoed)) { 
    $getProduct = mysql_query("SELECT name, shortname FROM products WHERE id='".$product['product']."'"); 
    $product2 = mysql_fetch_array($getProduct); 

    echo '<li><a href="http://' . $product2['shortname'] . '.mydomain.com">' . $product2['name'] . '</a></li>'; 
    $already_echoed[] = $product['product']; 
    } 

    } 

    echo '</ul>'; 

} 


} 
+2

나는 그것이 무슨 일이 일어나고 있는지 믿을 수 없다고 확신한다. ''% Coca % ''는''Coca Cola'와 일치해야합니다. 다른 처리가 진행되고 있지 않습니까? 실제로 실행 된 샘플 쿼리를 출력 할 수 있습니까? –

+1

혹시 수동으로 해당 쿼리를 실행하려고 시도한 적이 있습니까? 그것이 SQL인지 아니면 다른 것인가를 결정하기 위해? –

+0

불필요한 인코딩과는 별도로, 제품 자체가'Coca \ tCola' 또는'Coca \ r \ nCola'로 저장 될 수 있습니다. 어쨌든 문자가 아닌 검색 문자열 chars를'%'로 변환해야합니다. – mario

답변

3
!ereg('[^A-Za-z0-9]', $search 

보인다. 나는 많은 PHP를 말하지 않고 문서를 살펴보기 위해 arsed 될 수 없다.