Php mysql选择的动态条件
我有一个发送ajax请求的表单中的输入(使用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
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...";