Php Mysql IN子句仅检索1行

Php Mysql IN子句仅检索1行,php,mysql,Php,Mysql,编辑: 感谢贝勒·雷和JvBerg——您的回答/评论帮助解决了问题。 我不得不删除这些引语——我没有意识到这一点。 谢谢大家的帮助 我正在尝试使用IN子句从“alerts”表中选择所有数据,其中ownerid=“$friend_ID”。 尽管谷歌搜索和代码更改很多,但我遇到的问题是它只检索一行 $fid=$ClassUsers->Friendids($user_id); echo $fid; 它返回了预期的1,2,3 但是,在尝试时: $sql="SELECT * FROM alerts

编辑: 感谢贝勒·雷和JvBerg——您的回答/评论帮助解决了问题。 我不得不删除这些引语——我没有意识到这一点。 谢谢大家的帮助

我正在尝试使用IN子句从“alerts”表中选择所有数据,其中ownerid=“$friend_ID”。 尽管谷歌搜索和代码更改很多,但我遇到的问题是它只检索一行

$fid=$ClassUsers->Friendids($user_id);
echo $fid;
它返回了预期的1,2,3

但是,在尝试时:

$sql="SELECT * FROM alerts WHERE ownerid IN('$fid')";
echo mysql_num_rows($db->query($sql));
仅返回1行

我的警报表:

有人知道为什么吗?或者如何解决这个问题? 我昨天、前一天和今天花了整整一个晚上在谷歌上搜索并尝试不同的方式来查询这个问题。
谢谢。

这取决于$fid的价值:

$fid = '1, 2, 3';
$sql="SELECT * FROM alerts WHERE ownerid IN( $fid )";
echo mysql_num_rows($db->query($sql));

将返回所有3行。

尝试引用您的值

IN ('1', '2', '3')
否则,它将查找字面上为“1、2、3”的值,而不是“1”或“2”或“3”。

如果$fid是一个数组,则需要执行以下操作

$fid_sql = implode(','. $fid);
$sql="SELECT * FROM alerts WHERE ownerid IN( $fid_sql )";
注意,如果DB中的每个值都是整数字段,则不应在其周围使用单引号


如果$fid是一个字符串=1、2、3,那么您需要做的就是在查询中去掉$fid周围的单引号。

尝试删除$fid周围的单引号,$fid的值是多少?您的最终查询是什么样子的?正如@BaylorRae所说的-回显您的SQL,并在数据库中运行-它将准确地告诉您错误是什么。您最好确保$fid不是来自用户或不受信任的类@我简直不敢相信。这就是问题所在。我怎么从来没有想到这一点我不知道…谢谢你。Deceze-$fid=$ClassUsers->FriendIds$user\u id;如上所述$然后fid返回userfriends表中的内容。在本例中,它返回1,2,3。安德鲁斯试过了,但也遇到了同样的问题,直到我去掉了这个。user113215-它不是,而且在类中已被消毒。不。它将只返回ownerid为1、2、3的行。不,“$fid”中只返回ownerid=1、2、3的行。这些值必须单独引用-例如:“1”、“2”、“3”中的WHERE ownerid,或者如果它们是数字,则可能根本不能引用-例如:WHERE ownerid在1、2、3中。看看我是如何在$fid中编写的!下次我在这里提供一个SQLFIDLE作为证明;我确实内爆了数组,正如你所说,我把它变成了一个字符串-我不知道的是删除引号,这就是问题所在。