Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.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 - Fatal编程技术网

Php mysql选择的动态条件

Php mysql选择的动态条件,php,mysql,Php,Mysql,我有一个发送ajax请求的表单中的输入(使用serializeArray()),根据这些选中的输入,查询将获得不同的数据(如过滤器)。但我在处理这些动态条件时遇到了问题,如果只有1(和)它工作,但由于某些原因超过1,它会抛出一个错误(显然一切正常): 问题出在哪里 编辑:选中两个复选框后,预期的实际查询将是$filter\u type=array(2,3)so: SELECT t1.id, t2.* FROM for_sale t1 INNER JOIN property t2 ON t2.id

我有一个发送ajax请求的表单中的输入(使用
serializeArray()
),根据这些选中的输入,查询将获得不同的数据(如过滤器)。但我在处理这些动态条件时遇到了问题,如果只有1(
)它工作,但由于某些原因超过1,它会抛出一个错误(显然一切正常):

问题出在哪里

编辑:选中两个复选框后,预期的实际查询将是
$filter\u type=array(2,3)
so:

SELECT t1.id, t2.*
FROM for_sale t1
INNER JOIN property t2 ON t2.id = t1.id
WHERE t2.use = 1AND t2.type = 2
OR t2.type = 3
-- $filter_status = NULL; but not printing
-- $filter_bhk = NULL; but not printing
-- $filter_city = NULL; but not printing
-- $filter_zone = NULL; but not printing
LIMIT ?, ?
由@MarcB修复(在注释中)


由于这是一个语法错误,您可以发布由代码生成的查询吗?在插入所有变量后,显示您生成的实际查询语句。实际错误在错误消息中指示的点之前。是的,它们只有2,
和t2.type=2\n或t2.type=3
。这就是生成的查询。如果你看一下生成SQL,你的问题就清楚了——你的一些变量中没有值。但是它们必须在查询中。那么空值就是问题所在?但是变量必须存在,或者如果有人选中一个复选框进行筛选,我如何添加它们?如果变量为空,可能会取消设置该变量??因为这是一个语法错误,您可以发布由代码生成的查询吗?在插入所有变量后,显示您生成的实际查询语句。实际错误在错误消息中指示的点之前。是的,它们只有2,
和t2.type=2\n或t2.type=3
。这就是生成的查询。如果你看一下生成SQL,你的问题就清楚了——你的一些变量中没有值。但是它们必须在查询中。那么空值就是问题所在?但是变量必须存在,或者如果有人选中一个复选框进行筛选,我如何添加它们?如果变量为空,可能会取消设置该变量??
$filter_type = isset( $_POST['type'] ) ?  filter_input( INPUT_POST , 'type', FILTER_SANITIZE_NUMBER_INT , FILTER_REQUIRE_ARRAY ) : NULL;

if ($filter_type != NULL) {
    foreach ($filter_type as $type=>$value) {
        if ($type === 0) {
            $type_cond = "\nAND t2.type = " . $value; // (int) instead of filter_input()?
        } else {
            $type_cond .= $type_cond . "\nOR t2.type = " . $value;
        }
    }
}

// I manually set $table, based on post (but not directly)
if ($stmt = $mysqli->prepare(' SELECT t1.id, t2.*
                               FROM ' . $table . ' t1
                               INNER JOIN property t2 ON t2.id = t1.id
                               WHERE t2.use = ?
                               ' . $type_cond
                                 . $filter_status
                                 . $filter_bhk
                                 . $filter_city
                                 . $filter_zone . '
                               LIMIT ?, ?')) {
SELECT t1.id, t2.*
FROM for_sale t1
INNER JOIN property t2 ON t2.id = t1.id
WHERE t2.use = 1AND t2.type = 2
OR t2.type = 3
-- $filter_status = NULL; but not printing
-- $filter_bhk = NULL; but not printing
-- $filter_city = NULL; but not printing
-- $filter_zone = NULL; but not printing
LIMIT ?, ?
$filter_type = "\nAND t2.ty...";