我正在使用PDO从我的数据库中获取一系列关系。
$dbRelaties = $dbh->query("SELECT pkRelatieId,naam,email FROM relaties");
在另一个函数中,我需要访问此数组中的一个特定行。我设法这样做了:
$klant = array();
foreach($dbRelaties as $dbRelatie)
{
if($dbRelatie["pkRelatieId"] == $relatie){ $klant = $dbRelatie; break; }
}
sendMail("Subject",$klant);
以上代码有效。但我正在寻找一个更简洁的解决方案和更快的解决方案,上面的代码在函数中调用,该函数在循环内调用。因此,每次执行时都必须循环$dbRelaties
以获得正确的关系。
有人能让我朝着正确的方向前进吗?
答案 0 :(得分:3)
假设pk
表示主键,则
while($row = mysql_fetch_assoc($result)) {
$dbRelatie[$row['pkRelatieID']] = $row;
}
会生成一个用主键字段键入的数组,所以
$dbRelatie[$pk]['naam']
会给你特定的pk的naam值。
答案 1 :(得分:1)
显示Marc B答案的PDO特定版本。
假设通过PDO执行查询,如下所示:
$sql = "SELECT pkRelatieId,naam,email FROM relaties";
$resultSet = $pdo->query($sql);
可以使用PDO的fetch方法将结果读入PHP数组。
$dbRelaties = array();
while ($row = $resultSet->fetch(PDO::FETCH_ASSOC)) {
$dbRelaties[$row['pkRelatieID']] = $row;
}
然后可以使用它来根据行的PK访问值。
sendMail("Subject", $dbRelaties[$relatie]['naam']);
此外。 PDO允许您为每个PDO实例分配默认提取模式,并且PDOStatement类是Traversable,因此您实际上不必在while循环中调用fetch()方法来遍历结果集。
如果要在查询之前对PDO对象执行此操作:(理想情况下,只需在创建对象后立即执行一次。)
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
然后,您可以在结果集上使用foreach循环来获取具有字段名称的行数组,而不是使用while循环。
$dbRelaties = array();
foreach ($stmt as $row) {
$dbRelaties[$row['pkRelatieID']] = $row;
}