Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用多个值搜索始终返回一个结果_Php_Mysql - Fatal编程技术网

Php 使用多个值搜索始终返回一个结果

Php 使用多个值搜索始终返回一个结果,php,mysql,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>'; } 我希望返回3个结果。您将中的值视为字符串。我认为您得到的是一个返回值,因为字符串正在转换回整数,即2。这里

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

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

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

我希望返回3个结果。

您将中的
值视为字符串。我认为您得到的是一个返回值,因为字符串正在转换回整数,即
2
。这里有一个解决方案:

SELECT name
FROM products
WHERE find_in_set(id, '$pid') > 0;
也可以插入不带引号的值:

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

删除$pid周围的单引号,使用如下查询

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

需要运行的查询如下:

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')

为false。

这是一个字符串,我将其转换为字符串,因为它以前是数组。当我删除单引号时,我没有得到任何返回。擦掉它,它就工作了!这段时间我一定把事情搞砸了。你的答案(没有引号)是正确的。
1 IN ('2,3,1')