在变量中添加字符串会在JavaScript onkey函数中添加“ \”

时间:2018-08-29 12:46:45

标签: javascript php string-concatenation

我对php和javascript还是比较陌生,我知道我犯了一些愚蠢的错误。但是,我的问题是,如果我在变量中添加字符串,它会在此之前添加“ \”。 我的Javascript函数:

$('#search_name').keyup(function(){
  var search1 = $(this).val();

   search1="and user_name like '%"+search1+"%'";//Concatenate string

  if(search1 != '')
  {
    load_data(search1);

  }
  else
  {
    load_data();   
  }
});

我有一个load_data函数,其URL为fetch_user.php

$(document).ready(function(){
 load_data();
 function load_data(query)
 {
  $.ajax({
  url:"fetch_user.php",
  method:"post",
  data:{query:query},
  success:function(data)
  {
    $('#result').html(data);
  }
});
}

现在在我的fetch_user.php上,我正在回荡连接的字符串,它添加了“ \”

if(isset($_POST["query"]))
{
 $search = mysqli_real_escape_string($con, $_POST["query"]);
 echo $search; 
}

输出为and user_name like \'%k%\' 而是应该是and user_name like '%k%' 所以,我在这里做错什么了。

谢谢

2 个答案:

答案 0 :(得分:1)

mysqli_real_escape_string函数通过添加/来转义所有引号。

但是,您永远不要使用Javascript构建查询并将其传递给php。相反,只能通过POST传递搜索字符串。

然后您可以在MySQL中构建查询并将变量传递给MySQL。

答案 1 :(得分:0)

由于mysqli_real_escape_string在引号中添加了转义字符(即 / ),而不是通过ajax发送where子句的一部分,因此您应该仅发布search1值。

$('#search_name').keyup(function(){
  var search1 = $(this).val();

  if(search1 != '')
  {
    load_data(search1);

  }
  else
  {
    load_data();   
  }
});

在PHP中:

if(isset($_POST["query"])){
 $search = "and user_name like '%".mysqli_real_escape_string($con, $_POST['query'])."%'";
 echo $search; 
}