2011-01-13 19 views
1

クライアントサイトに小さなAJAX機能を追加するように求められました。サイトのアイデアは、ユーザが「名前」を入力して開始し、製品ということである空白文字列MySQL文字列検索

  • ID
  • 製品

:基本的に私は3つのフィールドでMySQLのテーブルを持っていますいくつかのキーストロークの後に表示されます。クエリは次のようになります。

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

「名前」にスペースがある場合を除き、すべてが機能します。たとえば、「Coca Cola」という名前がある場合、「Coca」と入力するとスクリプトが正常に表示されますが、スペースを入力するとすぐに行が返されなくなります。

私はどこでも解決策を探しました。スペースはある種のセパレータとして解釈されることは理解していますが、データベースを取得してスペースを...よく...スペースとして解釈することはできますか?そうでない場合は、私が達成したいことをするためのより良い方法がありますか?

EDIT:

私はPHPMyAdminの中でそれを実行し、それが実際にはPHPで何かでなければならないと信じて私をリードされ、正しい結果を返します。完全なスクリプトをtheresの:あなたは文字の許可リストからスペースを除いているよう

$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% ''は' 'コカコーラ'と一致するはずです。他の処理が行われていないことは確かですか?実際に実行されるサンプルクエリを出力できますか? –

+1

これまでに手動でクエリを実行しようとしましたか?それがSQLかどうかを判断する –

+0

余計なエンコーディングとは別に、製品自体が 'Coca \ tCola'や' Coca \ r \ nCola'として保存されている可能性があります。だから、文字以外の検索文字列を '%'に変換する必要があります。 – mario

答えて

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

が見えます。私はPHPをあまり話さず、ドキュメントを見に行くことはできません。