jquery php实时搜索

jquery php实时搜索,php,jquery,livesearch,Php,Jquery,Livesearch,我使用ajax和php进行实时搜索 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_da

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

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%'";
我想要搜索结果,从第一个字母开始搜索,而不是从中间或最后一个字母开始搜索。例如:
关键字=JO
结果我想要=
*约翰·贝克
*乔纳森·威尔科 *凯蒂·琼

有一段时间,系统不仅接收第一个、甚至中间和最后一个单词
*托尼·内斯乔

*BAJOZ ZACKS

只需从每个
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的其他地方找到大量示例)。

只需从每个
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上的其他地方找到大量示例)。

您可以像这样使用运算符:

$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'";
您可以这样使用运算符:

$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'";

简单,在您的查询中将
%
想象为
*
,因此如果您发出第一个
%
,它将像
JO*
一样搜索,但在SQL中它的
JO%
简单,在您的查询中想象
%
*
,因此如果您发出第一个
%
它将像
JO*
一样搜索,但在SQL中它的
JO%