while 循环内的查询仅显示 1 个结果
query inside while loop only shows 1 result
我在 php 中做了一个 while 循环,一切顺利,但问题是
我不仅想获取用户的 ID,还想获取另一个 table 中的一些其他内容,所以当我继续在这个 while 循环中进行查询时,select 中的所有内容第二个table(其中id等于第一个查询结果的id),它只有returns 1个结果...
所以这是我目前拥有的代码:
public function getFriends($id)
{
global $params;
$get = $this->db->select("{$this->DB['data']['friends']['tbl']}", "*",
array(
"{$this->DB['data']['friends']['one']}" => $id
)
);
if($get)
{
while($key = $get->fetch())
{
$query = $this->db->query("SELECT * FROM {$this->DB['data']['users']['tbl']}
WHERE {$this->DB['data']['users']['id']} = :id",
array(
"id" => $key->{$this->DB['data']['friends']['two']}
)
);
while($row = $query->fetch())
{
$params["user_friends"][] = [
"id" => $key->{$this->DB['data']['friends']['two']},
"name" => $row->{$this->DB['data']['users']['username']},
"look" => $row->{$this->DB['data']['users']['figure']}
];
}
}
}
else
{
$params["update_error"] = $params["lang_no_friends"];
}
}
提前致谢!
请帮帮我!
诊断 PHP 和 Mysql 问题的第一步是在代码中添加行,告诉您每一行在做什么(每次进入循环时声明;当每个 mysql query is 运行, 吐出查询字符串)这样就可以缩小问题出在哪里了。通常这会让你回想起来很愚蠢:"Duh, this query didn't return anything because I formatted the record ID wrong" 等等。
您在上面提供的代码片段对我帮助不大。我是故障排除者(不是解析器),所以我需要诊断数据(不是直接代码)来提供比这更多的帮助。
在没有答案的情况下,我不知道您在幕后使用的是什么数据库框架……PDO、mysqli_ 或(希望不是)mysql_。但是,无论如何,问题可能是您的第二个查询阻止了第一个查询继续。我会使用 PDO->fetchAll() 来获取所有这些......但你说你不能那样做......所以,循环第一个并将这些结果加载到数组中是我要做的第一件事,看看是否这是问题所在:
public function getFriends($id)
{
global $params;
$get = $this->db->select("{$this->DB['data']['friends']['tbl']}", "*",
array(
"{$this->DB['data']['friends']['one']}" => $id
)
);
$firstResults = array();
if( $get ) {
while( $key = $get->fetch() ) {
$firstResults[] = $key;
}
}
else
{
$params["update_error"] = $params["lang_no_friends"];
}
foreach( $firstResults AS $key )
{
$query = $this->db->query("SELECT * FROM {$this->DB['data']['users']['tbl']}
WHERE {$this->DB['data']['users']['id']} = :id",
array(
"id" => $key->{$this->DB['data']['friends']['two']}
)
);
while($row = $query->fetch())
{
$params["user_friends"][] = [
"id" => $key->{$this->DB['data']['friends']['two']},
"name" => $row->{$this->DB['data']['users']['username']},
"look" => $row->{$this->DB['data']['users']['figure']}
];
}
}
}
如果这不起作用,那么我们需要更多数据...例如生成的查询是什么?当您 运行 它手动执行 return 不止一个结果?如果您摆脱内部查询,是否可以解决问题?等等
我在 php 中做了一个 while 循环,一切顺利,但问题是 我不仅想获取用户的 ID,还想获取另一个 table 中的一些其他内容,所以当我继续在这个 while 循环中进行查询时,select 中的所有内容第二个table(其中id等于第一个查询结果的id),它只有returns 1个结果...
所以这是我目前拥有的代码:
public function getFriends($id)
{
global $params;
$get = $this->db->select("{$this->DB['data']['friends']['tbl']}", "*",
array(
"{$this->DB['data']['friends']['one']}" => $id
)
);
if($get)
{
while($key = $get->fetch())
{
$query = $this->db->query("SELECT * FROM {$this->DB['data']['users']['tbl']}
WHERE {$this->DB['data']['users']['id']} = :id",
array(
"id" => $key->{$this->DB['data']['friends']['two']}
)
);
while($row = $query->fetch())
{
$params["user_friends"][] = [
"id" => $key->{$this->DB['data']['friends']['two']},
"name" => $row->{$this->DB['data']['users']['username']},
"look" => $row->{$this->DB['data']['users']['figure']}
];
}
}
}
else
{
$params["update_error"] = $params["lang_no_friends"];
}
}
提前致谢! 请帮帮我!
诊断 PHP 和 Mysql 问题的第一步是在代码中添加行,告诉您每一行在做什么(每次进入循环时声明;当每个 mysql query is 运行, 吐出查询字符串)这样就可以缩小问题出在哪里了。通常这会让你回想起来很愚蠢:"Duh, this query didn't return anything because I formatted the record ID wrong" 等等。
您在上面提供的代码片段对我帮助不大。我是故障排除者(不是解析器),所以我需要诊断数据(不是直接代码)来提供比这更多的帮助。
在没有答案的情况下,我不知道您在幕后使用的是什么数据库框架……PDO、mysqli_ 或(希望不是)mysql_。但是,无论如何,问题可能是您的第二个查询阻止了第一个查询继续。我会使用 PDO->fetchAll() 来获取所有这些......但你说你不能那样做......所以,循环第一个并将这些结果加载到数组中是我要做的第一件事,看看是否这是问题所在:
public function getFriends($id)
{
global $params;
$get = $this->db->select("{$this->DB['data']['friends']['tbl']}", "*",
array(
"{$this->DB['data']['friends']['one']}" => $id
)
);
$firstResults = array();
if( $get ) {
while( $key = $get->fetch() ) {
$firstResults[] = $key;
}
}
else
{
$params["update_error"] = $params["lang_no_friends"];
}
foreach( $firstResults AS $key )
{
$query = $this->db->query("SELECT * FROM {$this->DB['data']['users']['tbl']}
WHERE {$this->DB['data']['users']['id']} = :id",
array(
"id" => $key->{$this->DB['data']['friends']['two']}
)
);
while($row = $query->fetch())
{
$params["user_friends"][] = [
"id" => $key->{$this->DB['data']['friends']['two']},
"name" => $row->{$this->DB['data']['users']['username']},
"look" => $row->{$this->DB['data']['users']['figure']}
];
}
}
}
如果这不起作用,那么我们需要更多数据...例如生成的查询是什么?当您 运行 它手动执行 return 不止一个结果?如果您摆脱内部查询,是否可以解决问题?等等