Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.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 高度动态表过滤_Php_Mysqli_Foreach_Unset_Array Filter - Fatal编程技术网

Php 高度动态表过滤

Php 高度动态表过滤,php,mysqli,foreach,unset,array-filter,Php,Mysqli,Foreach,Unset,Array Filter,我在根据用户输入筛选SQL表时遇到问题;我不太明白如何使它对我需要适应的输入范围保持健壮 本质上,从POST数据中提取的用户输入用于从包含过滤器参数的SQL表构建数组$filterarray。从每个选定表行将三列拉入数组;第1列是与“finaloutputs”SQL表中的列名相对应的字符串,第2列包含比较运算符,第3列是整数值。因此,如果以字符串的顺序返回,数组的每一行将构建一个选择过滤器,例如“column_x

我在根据用户输入筛选SQL表时遇到问题;我不太明白如何使它对我需要适应的输入范围保持健壮

本质上,从POST数据中提取的用户输入用于从包含过滤器参数的SQL表构建数组$filterarray。从每个选定表行将三列拉入数组;第1列是与“finaloutputs”SQL表中的列名相对应的字符串,第2列包含比较运算符,第3列是整数值。因此,如果以字符串的顺序返回,数组的每一行将构建一个选择过滤器,例如“column_x<10”或columm_y=6$filterarray可以有1到100+行,指向finaloutputs中的各个列,并使用任何比较运算符

下面这样的查询可以正常工作:

$cf1 = wombats
$cf2 = “=”
$cf3 = 0

$result = $DBLink->query("SELECT id FROM finaloutputs WHERE $cf1 $cf2 $cf3");
但这只是直接注入一组变量。我如何用一系列的参数来实现这一点呢?代码需要在“和”式运算符下工作;返回的结果必须满足所有筛选器

这似乎在某种程度上可以通过“foreach”和“array_filter”或“unset”的组合实现。不过,我不太确定如何真正做到这一点

例如,像这样但有效的东西…:

//$filterarray contains in each row:
    // string matching a column in finaloutputs table ('cf1')
    // comparator ('cf2')
    // value ('cf3')

$result = $DBLink->query("SELECT * FROM finaloutputs");
$resultarray = $result->fetch_assoc();

foreach ($filterarray as $row){
    unset($resultarray[WHERE $row['cf1'] . $row['cf2'] . $row['cf3']]); 
}
我意识到我的第一个例子是基于过滤器的包含为真,第二个例子是基于过滤器的排除为真。我真的不在乎我用哪一个-我可以交换比较运算符来适应-我只是在寻找高效的代码


提前感谢您的帮助

为什么不让SQL过滤数据,以便得到想要的结果

这应该起作用:

$sql = 'select * FROM finaloutputs WHERE TRUE';
foreach ($filterarray as $row){
    $sql .= ' AND ' . $row['cf1'] . $row['cf2'] . $row['cf3']; 
}
$resultarray = $DBLink->query($sql)->fetch_assoc();

啊,当然。这确实应该奏效。我忘记了$sql的内容只是一个字符串。我敢肯定,新手犯了个错误。非常感谢,这正是我想要的!