如何重新编写此SQL语句以接受数组变量?

时间:2016-10-25 18:17:14

标签: php mysql sql

我正在进行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')

哪个看起来不正确?

我哪里错了?

3 个答案:

答案 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).")";