从数据库获取用户的所有记录

时间:2012-10-24 19:22:20

标签: php mysql

在我的表'user_sightings'中,我允许每个用户有多个条目,所以看起来如下......

------------------------
ID | user_ID | postcode
1     39       ab12cd
2     39       sk91ab
3     39       ab44ix

运行我的查询后,我尝试使用以下内容打印出每个邮政编码...

echo $row["postcode"];

只有这只打印出该用户的第一个实例,这是否可以为用户获取所有实例并将其动态设置为变量?


查询:

$sth = $conn->prepare("SELECT * FROM directory, user_sightings WHERE directory.user_active != '' AND directory.ID = :uid AND user_sightings.user_ID = :uid");
$sth->execute(array(':uid' => $UID));

while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
      echo $row["postcode"];
 }

2 个答案:

答案 0 :(得分:1)

您需要while循环到fetch the rows,然后您可以在PHP中使用variable assignment为每个用户分配一个变量:

while($row ... {
    ${$row[user_ID]} = $row[postcode];
}

您将需要一种唯一标识变量的方法,因为那个user_ID的最后一个实例将是我建议使用数组的变量的值。也许是这样的事情:

${'user_' . $row[user_ID]}[] = $row[postcode];

这样,$user_39将成为包含(ab12cd, sk91ab, ab44ix)的数组。

或者您可以将所有数据放入数组中:

$user_ID = $row[user_ID];
$array[$user_ID][] = $row[postcode];

这两个选项中的任何一个都会进入while循环。

<强>澄清

如果您想为特定用户调用邮政编码,请先将数据放入多维数组:

while($row ... {
    $user_ID = $row[user_ID];
    $array[$user_ID][] = $row[postcode];
}

然后将像这样存储邮政编码(以下示例):

echo $array[39][0];
//ab12cd

echo $array[39][1];
//sk91ab

echo $array[39][2];
//ab44ix

[39]代表user_ID

答案 1 :(得分:0)

使用PDO

$sth = $conn->prepare("SELECT * FROM directory, user_sightings WHERE directory.user_active != '' AND directory.ID = :uid AND user_sightings.user_ID = :uid");
$sth->execute(array(':uid' => $UID));
$sth->setFetchMode(PDO::FETCH_ASSOC);  
while($row = $sth->fetch()) {  
echo $row['postcode'] . "\n";  
    }