将PHP变量传递到sql查询
我想创建一个过滤器,并在WHERE子句中将类别和值传递到sql查询中。 如果我手动设置类别,它将获取值并过滤结果。但是当我想通过分类时,它会给我这个错误 以下是我使用的代码:将PHP变量传递到sql查询,php,sql,variables,url,Php,Sql,Variables,Url,我想创建一个过滤器,并在WHERE子句中将类别和值传递到sql查询中。 如果我手动设置类别,它将获取值并过滤结果。但是当我想通过分类时,它会给我这个错误 以下是我使用的代码: $('#filterEvents').click(function () { document.location.href = 'events.php?filter=' + $('#eventFilterOption').val() + '&filterValue=' + $('#eventFilterI
$('#filterEvents').click(function () {
document.location.href = 'events.php?filter=' + $('#eventFilterOption').val() + '&filterValue=' + $('#eventFilterInput').val();
});
以及PHP处理:
$category = $_GET['filter'];
$searchValue = $_GET['filterValue'];
$sql = "SELECT EV_Date, EV_KKZ, EV_CardNr, TE_Name, EV_Name, EV_SurName, EV_EventTyp FROM events1
INNER JOIN terminal1 ON terminal1.TE_IDX = events1.EV_FK_TermIDX
WHERE ".$category." = '" . $searchValue . "'
ORDER BY EV_Date DESC
LIMIT 2000";
print_r($sql);
$query = $DB->prepare($sql);
$query->execute();
$data = $query->fetchAll(PDO::FETCH_ASSOC);
此处的值为空:
$category = $_GET['filter'];
$searchValue = $_GET['filterValue'];
您应该调试如何在js中获取它们的方法。
顺便说一句,打开此页面/events.php时,您将始终看到该错误。因为这些变量默认为空。您在获取变量时遇到问题-PHP脚本无法获取值-因此我相信您的Javascript中存在错误 更重要的是,这不是运行查询的安全方法。您的PHP正在获取用户传递的变量,并将它们直接插入到SQL中,而无需验证。很容易滥用此功能来提取信息或修改数据库
您应该使用
$category
的值来选择一个已知列,然后使用绑定参数来设置$searchValue
如果稍微更改功能,您将能够使用带有绑定参数的准备好的查询
所以,假设你现在有颜色和大小的过滤器,看起来你会像这样调用URL
events.php?filter=Colour&filterValue=Red
events.php?filter=Size&filterValue=Large
您可以更改为传递筛选器[名称]=值
events.php?filterColour=Red
events.php?filterSize=Large
Javascript看起来像这样
$('#filterEvents').click(function () {
document.location.href = 'events.php?filter' + $('#eventFilterOption').val() + '=' + $('#eventFilterInput').val();
});
查询可以重写如下(假设列的大小和颜色)
并添加了一个绑定实际参数的调用
$query = $DB->prepare($sql);
$query->bindParam(':colour', $_GET['filterColour'], PDO::PARAM_STR, 12);
$query->bindParam(':size', $_GET['filterSize'], PDO::PARAM_STR, 12);
$query->execute();
这允许您使用准备好的查询并避免SQL注入的风险
作为奖励(或bug),它可以同时支持多个过滤器选项
events.php?filterSize=Large&filterColour=Red
转储查询-消息表明您有语法错误。调试代码您应该对照允许的列名白名单检查
$category
,并为值绑定一个参数。这是一个很大的sql输入漏洞。@jeroen,我得到了$category
的值,我可以打印出来。但是,当我试图在该条款中使用时,它没有正常工作。问题是,我可以使用其他值代码>。这样做的结果是什么?第一个加载是数据库中的值的默认显示。当我开始过滤它们时,有一个问题,我不知道你的意思。但是这个错误:因为$category和$searchValue是空的。我不知道你想得到什么答案。
events.php?filterSize=Large&filterColour=Red