我在WHERE IN条件下使用的IFNULL功能有问题:
SELECT provider_id FROM provider WHERE provider_id IN ( IFNULL("131, 132",'999') )
我尝试了所有引用的替代方案,如:
SELECT provider_id FROM provider WHERE provider_id IN ( IFNULL("'131', '132'", '999') )
但不能用PHP完成这项工作。
您能否建议如何在IFNULL函数中正确格式化多值参数?
答案 0 :(得分:0)
SELECT provider_id FROM provider WHERE provider_id IN ('131', '132', '999')
只需尝试上面的代码。
您不需要任何额外的报价或其他内容来执行您的查询。
答案 1 :(得分:0)
IFNULL
不接受" 多值参数"。没有办法正确格式化它。
IFNULL
函数只有两个参数。如果第一个参数的计算结果为NULL,则该函数返回第二个参数。否则,它返回第一个表达式。
即SQL表达式
IFNULL(foo,'bar')
相当于
CASE WHEN foo IS NULL THEN 'bar' ELSE foo END
此:
SELECT IFNULL("131, 132",'999')
返回:
IFNULL("131, 132",'999')
--------------------------
131, 132
而且:
provider_id IN ( IFNULL("131, 132",'999') )
相当于:
provider_id = '131, 132'
目前尚不清楚您要完成什么,或者为什么IFNULL
函数包含在声明中。
备份一个步骤,更清楚地表达您要解决的问题。
答案 2 :(得分:0)
首先,您的问题是使用IFNULL
非空值,这没有任何意义。
其次IFNULL
会返回单个值,因为它与provider_id IN (...)
provided_id=...
最后,如果你想检查PHP变量是否为null,那么让PHP处理它。
//$pdo_test
$query = "SELECT provider_id FROM provider";
if ($pdo_test !== null) {
$query = " WHERE provider_id=?"
}
然后你可以进行查询:
$stmt = $pdo->prepare($query);
if ($pdo_test !== null) {
$stmt->bindParam(1,$pdo_test,PDO::PARAM_INT); //Looks like an int, but change if its something else
}
//Code like $stmt->fetch() and processing goes here