我正在进行API调用以从我的数据库中检索user_name
。
我的第一步是拨打电话以检索所有player_id's
。它们存储在$communityPlayersIds
中,目前输出如下:
[" 2"" 31"" 31"" 32"]
我现在想再次拨打数据库来获取匹配的id的user_name
个。
$communityPlayerNames = array();
$communityPlayerNames = $dao->getPlayerNames($communityPlayersIds);
我已经调查过了,看到我应该使用这样的IN命令:
public function getPlayerNames($player_ids)
{
$returnValue = array();
$sql = "SELECT user_name\n"
. "FROM users\n"
. "WHERE id IN ( '".$player_ids."')";
$result = $this->conn->query($sql);
if($result != null && (mysqli_num_rows($result) >= 1)){
while($row = $result -> fetch_array(MYSQLI_ASSOC)){
if(!empty($row)){
$returnValue[] = $row;
}
}
}
return $returnValue;
}
}
然而,这不起作用并返回:
[{" USER_NAME":空}]
如果我回显($ sql)我得到了这个:
SELECT user_name FROM users WHERE id IN(' 2,31,31,32')
哪个看起来不正确?
我哪里错了?
答案 0 :(得分:3)
您基本上希望最终查询看起来像这样
Select user_name from users where id in (2,31,31,32) -- dupe 31 does no harm
确保您的一系列ID位于括号IN ($player_ids)
内,而不只是单引号IN '$player_ids'
答案 1 :(得分:0)
您可以尝试构建SQL的IN部分:
$returnValue = array();
$in_statement = "(";
foreach($player_ids as $player_id)
{
$in_statement = $in_statement.$player_id->player_id.",";
}
rtrim($in_statement, ",");
$in_statement = $in_statement.")";
$sql = "SELECT community_players.player_id\n"
. "from community_players\n"
. "where community_players.community_id in ".$in_statement."";
所以只是中间部分是新的,其中$ in_statement构建。在您的SQL中,您必须将“=”更改为“IN”。您可以更短地生成IN部件,但这样您可以更轻松地查看它是如何完成的,因此您可以根据自己的需要进行调整。
答案 2 :(得分:0)
在您的代码中,'
放在显示语法错误的in
之后。
你可以尝试
假设你的
$communityPlayersIds
的值低于数组:
[ “2”, “31”, “31”, “32”]
如果它不是数组,则使用json_decode()
转换它
然后尝试以下查询
$sql = "SELECT community_players.player_id\n"
. "from community_players\n"
. "where community_players.community_id IN (".join(",",$communityPlayersIds).")";