Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.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
在Jquery/Php/Mysql中过滤用户的自定义条件_Php_Jquery_Mysql - Fatal编程技术网

在Jquery/Php/Mysql中过滤用户的自定义条件

在Jquery/Php/Mysql中过滤用户的自定义条件,php,jquery,mysql,Php,Jquery,Mysql,我正在建立一个工具,向我的用户群发送电子邮件。我想创建一个对话框,用户可以在其中创建子句来筛选他们要发送到的用户。即 在2015年8月8日之前注册的用户-这在mysql查询中非常容易做到 但是我想让用户组合子句来进一步过滤用户。即 2015年8月8日之前注册的用户和 组2的用户 我的问题是,获得正确用户的最有效方法是什么?将这两个示例条件转换为mysql查询非常容易,但我不知道如何保持查询的灵活性,以便基本上使用未提交的子句 似 $stmt = $mysqli->prepare("

我正在建立一个工具,向我的用户群发送电子邮件。我想创建一个对话框,用户可以在其中创建子句来筛选他们要发送到的用户。即

在2015年8月8日之前注册的用户-这在mysql查询中非常容易做到

但是我想让用户组合子句来进一步过滤用户。即

2015年8月8日之前注册的用户和

组2的用户

我的问题是,获得正确用户的最有效方法是什么?将这两个示例条件转换为mysql查询非常容易,但我不知道如何保持查询的灵活性,以便基本上使用未提交的子句

    $stmt = $mysqli->prepare("SELECT 
    id
    FROM users
    WHERE regDate > ?
    AND usergroup = ?
    ");
但regDate和usergroup当然是可变的,这取决于users子句所说的内容

同样,问题不在于如何将子句转换为查询,而在于如何以动态方式将大量where子句插入查询。基本上,如何在一个准备好的语句中集成数量可变的AND子句。希望您理解^^

使用MySQL str\u


这可能不是最好的解决方案,但我以前在一个参数化查询中使用过这种结构来对搜索结果应用过滤器。基本原则是,一旦清理并验证了输入,就可以循环执行输入并将其分配给查询,同时保持其参数化。其中1=1的存在纯粹是为了避免使用条件语句,而使用反向LIKE来获取匹配项,即其中类似于“%”+FIELDNAME+“%”的“Jack,Jill,Jason”

//假设接收条件如下 $filters=数组 “品牌”=>阵列1、2、3、4、, 'colors'=>数组'a','b','c'; ; $params=数组 $\u会话['Member\u ID'], $category\u id ; $sql=从dbo.GetFrontEndProducts?中选择*?,?其中1=1; 如果计数$filters['brands']>0{ $sql.=和?像“%”+品牌名称+“%”; 数组_push$params,内爆“,”,$filters['brands'; } 如果计数$filters['colors']>0{ $sql.=和?像“%”+颜色+“%”; 数组_push$params,内爆',',$filters['colors']; } $sql..=按项目下单\u ID偏移量转换,?行获取下一个convertint,?仅行;
//执行这可能是未准备好的版本。。。但我想让他们做好准备:

$andArray = array();
if($clause1 != "") $andArray[] = "regDate > {$regDateCond}";
if($clause2!= "") $andArray[] = "usergroup = {$usergroupCond}";

$whereStr = implode(" AND ", $andArray );

$query = "Select * from users WHERE {$whereStr}";

谢谢,但这不是问题所在。这是关于我如何在一个准备好的语句中添加不同数量的AND子句。嘿,刚刚发布了一个未准备好的版本。这对你来说可能很有趣,也应该有效,而且是一种更干净的方式。谢谢你的提醒。好办法。。。内爆的巧妙运用。
$andArray = array();
if($clause1 != "") $andArray[] = "regDate > {$regDateCond}";
if($clause2!= "") $andArray[] = "usergroup = {$usergroupCond}";

$whereStr = implode(" AND ", $andArray );

$query = "Select * from users WHERE {$whereStr}";