Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 符号和散列使我的MYSQL查询崩溃_Php_Mysql_Hash_Ampersand - Fatal编程技术网

Php 符号和散列使我的MYSQL查询崩溃

Php 符号和散列使我的MYSQL查询崩溃,php,mysql,hash,ampersand,Php,Mysql,Hash,Ampersand,我使用这段代码从mysql查询中获取数据 if ($filter == "All" && $filter != "") {date_default_timezone_set('America/Denver'); $todays123 = date("Y-m-d H:i"); $query = "SELECT * FROM events WHERE events.name LIKE '%".$search."%' AND events.user = '".$_SESSION

我使用这段代码从mysql查询中获取数据

    if ($filter == "All" && $filter != "") {date_default_timezone_set('America/Denver');
$todays123 = date("Y-m-d H:i");
$query = "SELECT * FROM events WHERE events.name LIKE '%".$search."%' AND events.user = '".$_SESSION['username']."' AND events.end > '".$todays123."'";
}else{ $todays123 = date("Y-m-d H:i");
$query = "SELECT * FROM events WHERE  events.name LIKE '%".$search."%'   AND events.price = '".$filter."' AND events.user = '".$_SESSION['username']."' AND events.end > '".$todays123."' OR events.description LIKE '%".$search."%'    AND events.price = '".$filter."' AND events.user = '".$_SESSION['username']."' AND events.end > '".$todays123."' OR events.user = '".$_SESSION['username']."' AND events.address LIKE '%".$search."%'   AND events.price = '".$filter."' AND events.end > '".$todays123."'  ";
} 
这是我的javascript代码

function user_display() {

var search = document.getElementById("search").value;

if (search == "" || search == null) {
    search="";
} 

var filter = document.getElementById("filter").value;

if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
} else {// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
        document.getElementById("table-content").innerHTML=xmlhttp.responseText;            
    }
}
    xmlhttp.open("GET","./xxx.php?action=display&search="+search+"&filter="+filter, true);
xmlhttp.send();
}

当搜索值不包含“&”和“#”时,它将正确匹配。当我输入一个符号和或散列符号时,查询将崩溃并且不显示任何内容


有没有关于它为什么这样做的建议?提前感谢

将代码更改为至少如下所示

 $search = mysql_real_escape_string($search);
 $filter = mysql_real_escape_string($filter);
 // hopefully username in $_SESSION is clean else repeat above for that and rerun your query 
 if ($filter == "All" && $filter != "") {date_default_timezone_set('America/Denver');
 $todays123 = date("Y-m-d H:i");
 $query = "SELECT * FROM events WHERE events.name LIKE '%".$search."%' AND events.user = '".$_SESSION['username']."' AND events.end > '".$todays123."'";
 }else{ $todays123 = date("Y-m-d H:i");
$query = "SELECT * FROM events WHERE  events.name LIKE '%".$search."%'   AND events.price =   '".$filter."' AND events.user = '".$_SESSION['username']."' AND events.end >   '".$todays123."' OR events.description LIKE '%".$search."%'    AND events.price =  '".$filter."' AND events.user = '".$_SESSION['username']."' AND events.end >  '".$todays123."' OR events.user = '".$_SESSION['username']."' AND events.address LIKE  '%".$search."%'   AND events.price = '".$filter."' AND events.end > '".$todays123."'  ";
  } 

上述更改将至少确保可以避免SQL注入。

您可能应该在JavaScript中使用
encodeURIComponent()
。很可能您没有得到结果,因为它没有在搜索变量中传递任何内容(或将其截断)。考虑一下搜索是否是“A & FoO=C &”。您正在请求的URL现在是
xxx.php?action=display&search=a&foo=c&filter=…
,因此您将得到另一个名为
foo的GET变量

var search = encodeURIComponent(document.getElementById("search").value);

如果是用户将提供的内容,则对过滤器执行相同操作。

如果使用事件名称的另一部分(不包括哈希),是否有效?检查它是否是导致它不显示的其他参数之一。@DavidueGenePeterson我的意思是说,如果你有一个事件“#1事件”,那么搜索“#1”时搜索“1”或“事件”是否会返回它?@jprofitt是的,这是正确的,我不得不建议使用准备好的语句而不是变量插值/串联。除此之外,它更容易阅读。这就是解决方案。
无法工作的原因是服务器不解释URL(即,
xxx.php?search=#1
),请不要建议SQL参数转义。参数绑定还远远不够superior@phil如果您重新阅读我的答案,它会说“将您的代码更改为至少如下所示”,因此
至少
是我答案中的关键字。我不是推荐它,而是尝试至少清理代码。我总是使用绑定,也会推荐它。但是考虑到第一次发布的代码,我不得不说提供的信息非常少,3小时前的这个可能是最好的答案