0

我开始使用 ajax 和 php 进行实时搜索

查询:

$("#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 BECKS
* JONATHAN WILKO * KATY JOANS

有一会儿,系统不仅会拾取第一个甚至中间和最后一个单词
* TONY NESJO
* BAJOZ ZACKS

4

2 回答 2

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 上找到很多其他示例)。

于 2011-03-20T21:33:38.200 回答
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'";
于 2011-03-20T21:48:27.980 回答