2011-03-20 105 views
0

Ive得到了工作与Ajax和PHP的实时搜索jQuery的PHP Live搜索

JQUERY:

$("#search").keyup(function() { 
    var search_input = $(this).val(); 
    var dataString = 'keyword='+ search_input; 
     if(search_input.length>1){ 
    $.ajax({ 
     type: "GET", 
     url: "include/search.php?diary_date", 
     data: dataString, 
     beforeSend: function() { 
      $('#loading').addClass('loading'); 
      }, success: function(server_response) {     
       $('#searchresultdata').html(server_response).show(); 
      $('span#faq_category_title').html(search_input); 
    } 
}); 
}return false; 
}); 

PHP:

$q = "SELECT id_user, f_name, l_name, postcode, email,telp FROM user 
WHERE f_name LIKE '%$keyword%' 
OR l_name LIKE '%$keyword%' 
OR email LIKE '%$keyword%' 
OR postcode LIKE '%$keyword%'"; 

我想要的搜索结果,从第一个字母搜索不从中间或最后一个例如:
keyword = JO
我想要的结果=
* JOHN小贝
* JONATHAN WILKO * KATY JOANS

片刻系统拿起不仅第一即使是中等&遗言
* TONY NESJO
* BAJOZ Zacks的

+0

简单,在查询想象'%'作为''所以如果你发出的第一个'%'它会搜索像'JO *'但在SQL的'JO%' – RobertPitt 2011-03-20 21:43:05

回答

4

只需删除第一个%来自您的各个LIKE字符串。

$q = "SELECT id_user, f_name, l_name, postcode, email,telp FROM user 
WHERE f_name LIKE '$keyword%' 
OR l_name LIKE '$keyword%' 
OR email LIKE '$keyword%' 
OR postcode LIKE '$keyword%'"; 

这就是说,你应该真的真的调查使用PDO或相似,并且发送一个绑定的查询,其中每个参数被正确地转义,以防止SQL注入攻击。

如果你这样做了SQL变得稍微复杂一些,但是,因为你不能绑定在字符串中的参数,所以添加%的也要做一个SQL连接:

$q = "SELECT id_user, f_name, l_name, postcode, email,telp FROM user 
WHERE f_name LIKE CONCAT(?, '%') 
OR l_name LIKE CONCAT(?, '%') 
OR email LIKE CONCAT(?, '%') 
OR postcode LIKE CONCAT(?, '%')"; 

(然后生成一个准备好的语句句柄并用适当的参数执行 - 你会在Stackoverflow上找到大量的例子)。

+0

感谢您的建议。 :) – tonoslfx 2011-03-21 09:51:23

1

您可以使用REGEXP运营商,像这样:

$q = "SELECT id_user, f_name, l_name, postcode, email,telp FROM user 
WHERE f_name REGEXP '^$keyword' 
OR l_name REGEXP '^$keyword' 
OR email REGEXP '^$keyword' 
OR postcode REGEXP '^$keyword'";