0

我正在使用 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以获取正确的关系。

任何人都可以让我朝着正确的方向前进吗?

4

2 回答 2

3

假设pk手段主键,那么

while($row = mysql_fetch_assoc($result)) {
    $dbRelatie[$row['pkRelatieID']] = $row;
}

会生成一个以您的主键字段为键的数组,所以

$dbRelatie[$pk]['naam'] 

会给你那个特定的 pk 的 naam 值。

于 2013-01-22T19:20:10.330 回答
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;
}
于 2013-01-27T04:55:33.680 回答