在多个值内搜索始终返回1个结果

时间:2014-03-14 11:59:14

标签: php mysql

我想检索某个列包含多个值之一的所有行,但出于某种原因,我总是得到一个结果。

$q = "SELECT name FROM products WHERE id IN ('$pid')";
$r = mysqli_query($dbc, $q);

while ( $row = mysqli_fetch_row($r) ) {
    echo $row[0].'<br>';
}

如果我回应$q我得到了这个:

SELECT name FROM products WHERE id IN ('2,3,1')

我希望能够获得3个结果。

3 个答案:

答案 0 :(得分:1)

您将in值视为字符串。我认为你得到一个返回值,因为字符串被转换回整数,2。这是一个解决方案:

SELECT name
FROM products
WHERE find_in_set(id, '$pid') > 0;

您也可以插入不带引号的值:

$q = "SELECT name FROM products WHERE id IN ($pid)";

答案 1 :(得分:0)

删除$ pid周围的单引号,使用像这样的查询

$q = "SELECT name FROM products WHERE id IN ($pid)";

答案 2 :(得分:0)

您需要运行的查询是:

SELECT name FROM products WHERE id IN (2,3,1)

和 - 如果您不想使用预准备语句 - 这是正确的代码:

$q = "SELECT name FROM products WHERE id IN ($pid)";

您的查询将只返回ID = 2的产品,因为MySQL会自动将字符串转换为数字,所以

2 IN ('2,3,1')

变为TRUE,因为字符串'2,3,1'被转换为数字2,而

1 IN ('2,3,1')

是假的。