0

私はPDOを使用して、DBからリレーションの配列を取得しています。

$dbRelaties = $dbh->query("SELECT pkRelatieId,naam,email FROM relaties");

別の関数では、この配列の1つの特定の行にアクセスする必要があります。私はこのようにそれを行うことができました:

$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

マーク 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 オブジェクトに対してこれを行う場合: (理想的には、オブジェクトを作成した直後に 1 回だけ)。

$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

次に、while ループを使用する代わりに、結果セットに対して foreach ループを使用して、フィールド名を含む行配列を取得できます。

$dbRelaties = array();
foreach ($stmt as $row) {
    $dbRelaties[$row['pkRelatieID']] = $row;
}
于 2013-01-27T04:55:33.680 に答える