我想检索某个列包含多个值之一的所有行,但出于某种原因,我总是得到一个结果。
$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个结果。
答案 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')
是假的。