Php 如何重新编写此SQL语句以接受数组变量?
我正在进行一个API调用,以从我的数据库中检索Php 如何重新编写此SQL语句以接受数组变量?,php,mysql,sql,Php,Mysql,Sql,我正在进行一个API调用,以从我的数据库中检索用户名 我的第一步是调用以检索所有玩家id。它们存储在$communityPlayersIds中,当前输出如下: [“2”、“31”、“31”、“32”] 现在我想对数据库进行第二次调用,以获取匹配id的用户名 $communityPlayerNames = array(); $communityPlayerNames = $dao->getPlayerNames($communityPlayersIds); 我已经调查过了,发现我应该使用一
用户名
我的第一步是调用以检索所有玩家id
。它们存储在$communityPlayersIds
中,当前输出如下:
[“2”、“31”、“31”、“32”]
现在我想对数据库进行第二次调用,以获取匹配id的用户名
$communityPlayerNames = array();
$communityPlayerNames = $dao->getPlayerNames($communityPlayersIds);
我已经调查过了,发现我应该使用一个类似这样的命令:
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;
}
}
$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."";
但是,这不起作用,并返回以下内容:
[{“用户名”:null}]
如果我回显($sql),我会得到以下结果:
从id位于('2,31,31,32'中的用户中选择用户名
哪个看起来正确,不是吗
我哪里出错了?您基本上希望最终查询如下所示
Select user_name from users where id in (2,31,31,32) -- dupe 31 does no harm
确保您的ID系列位于($player\u id)中的括号
内,而不仅仅是“$player\u id”中的单个引号
您基本上希望最终查询如下所示
Select user_name from users where id in (2,31,31,32) -- dupe 31 does no harm
确保您的ID系列位于($player\u id)
中的括号内,而不仅仅是“$player\u id”中的单个引号
您可以尝试在SQL的以下部分中构建:
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;
}
}
$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_语句就是在这里生成的。在SQL中,必须将“=”改为“in”。您可以在较短的时间内生成部分,但通过这种方式,您可以更容易地看到它是如何完成的,因此您可以根据自己的需要对其进行调整。您可以尝试像这样在SQL中构建部分:
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;
}
}
$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_语句就是在这里生成的。在SQL中,必须将“=”改为“in”。您可以在较短的时间内生成部分,但通过这种方式,您可以更容易地看到它是如何完成的,因此您可以根据自己的需要对其进行调整。在您的代码中,您将“
放在中的之后,这会显示语法错误。
你可以试试
假设你
$communityPlayersIds
具有以下数组值:
[“2”、“31”、“31”、“32”]
如果不是数组,则使用json\u decode()
然后尝试下面的查询
$sql = "SELECT community_players.player_id\n"
. "from community_players\n"
. "where community_players.community_id IN (".join(",",$communityPlayersIds).")";
在代码中,您在
中的
之后添加了
,显示语法错误。
你可以试试
假设你
$communityPlayersIds
具有以下数组值:
[“2”、“31”、“31”、“32”]
如果不是数组,则使用json\u decode()
然后尝试下面的查询
$sql = "SELECT community_players.player_id\n"
. "from community_players\n"
. "where community_players.community_id IN (".join(",",$communityPlayersIds).")";
您应该查看表值参数……在访问bobby tables之前,您应该研究如何在php中使用参数化查询。它说您的语法不正确,所以为什么不至少转储SQL语句字符串以查看其外观。另外,还不清楚如何从给定的JSON构建
$player\u id
,因此这可能是一个提示。因此,我需要转储$communityPlayersIds
数组的“player\u id”部分,并用剩余的id号重新构建它。我已经用我的新函数和我取得的进展更新了这个问题。我去掉了“玩家id”,现在有了一个只有数字的数组。认为函数没有返回任何值吗?您应该查看表值参数……在访问bobby tables之前,您应该研究如何在php中使用参数化查询。它说您的语法不正确,所以为什么不至少转储SQL语句字符串以查看它的外观。另外,还不清楚如何从给定的JSON构建$player\u id
,因此这可能是一个提示。因此,我需要转储$communityPlayersIds
数组的“player\u id”部分,并用剩余的id号重新构建它。我已经用我的新函数和我取得的进展更新了这个问题。我去掉了“玩家id”,现在有了一个只有数字的数组。认为函数没有返回任何值吗?该查询已经在给定的代码中,但没有显示的是如何在给定的JSON@JeffPuckettII除非我读错了,否则他的语法是“.$player_id.”“;…不()。我已经用我的新函数和我所取得的进展更新了这个问题。我去掉了“player_id”,现在有了一个只包含数字的数组。认为该函数没有返回任何值吗?@RDowns在Chrome控制台中尝试一下myArray=[12150,32];myArray.toString()该查询已经存在于给定的代码中,但没有显示的是如何在给定的代码中获取这些数字JSON@JeffPuckettII除非我读错了,否则他的语法是“.$player_id.”“。。。没有()。我已经用我的新函数和我取得的进展更新了这个问题。我去掉了“玩家id”,现在有了一个只有数字的数组。是否认为函数没有返回任何值?@RDowns在Chrome控制台myArray=[12150,32]中尝试此操作;myArray.toString()此行:$in_语句[]=$player_id->player_id;出现以下错误:注意:尝试获取非对象的属性。如果我把“echo json_encode($player_id);”在循环中,我得到{“player_id”:“2”}{“player_id”:“31”}{“player_id”:“32”}这一行:$in_statement[]=$player_id->player_id;出现以下错误:注意:尝试获取非对象的属性。如果我把“echo json_encode($player_id);”在循环中我得到{“player_id”:“2”}{“player_id”:“31”}{“player_id”:“32”}