我对IN子句有一个奇怪的问题
变量$ fuel来自对此php页面的Ajax调用。
$fuel = $_REQUEST['fuel'];
var_dump($fuel) = 'gas' ( for instance)
现在,当在发起Ajax调用的php页面中未选择$ fuel时,我需要为$ fuel插入所有可能值,并使用以下代码:
if($fuel=='none'){
$fuel=array('gas','diesel','hybrid','electric');
$fuel=implode(',',$fuel);
}
这是查询。当值直接来自Ajax调用时,例如,当$ fuel ='gas'时,它可以正常工作。
但是当我的IF条款产生$ fuel并且$ fuel ='gas,diesel,hybrid,electric'时,它给了我一个空集。
SELECT * FROM vprice_range WHERE (power >= $power)
AND (price BETWEEN $low AND $high)
AND (fuel IN ('$fuel'))
AND (mileagemix < $mileage)
AND (emission_co2 < $co2)
AND (trunk >= $trunk)
这可能无关紧要,但请注意,FIELD'燃料'是一个ENUM字段('gas','diesel','hybrid','electric')
据我所知,$ fuel的格式正确为字符串。
请告知
答案 0 :(得分:4)
您的问题是IN
子句的值需要引用WHERE whatever IN ('one','two','three')
等等。您可以使用$fuel = "'" . implode("','", $fuel) . "'";
解决此问题。但需要注意的是,如果您选择所有可能的值,为什么不在这种情况下将AND fuel IN
完全从查询中删除?
答案 1 :(得分:1)
它正在接受字符串变量。问题是整个字符串被解释为一个值,类似于'gas,diesel,. . .'
。这不是你的意思。
相反,请使用find_in_set()
:
. . .
and find_in_set(fuel, $fuel) > 0)
答案 2 :(得分:0)
@Gordon Linoff是对的。另一种解决方案是提供缺少的单引号:
$fuel=implode("','",$fuel);