2013-01-05 87 views
0

我有數據庫包含人員,每個人可以有幾個聯繫人(例如ICQ,電子郵件等)。我需要在我的頁面上打印這些內容。從PostgreSQL數據庫打印

我與其中包含表kontakty這個表有列id_osoby(外鍵引用osoby)行PostgreSQL數據庫,id_typy_kontaktu(外鍵引用typy_kontakty)和kontakt工作。

$stmt = $db->query("SELECT * FROM kontakty WHERE id_osoby = $row[id_osoby]"); 
      $row_kontakty = $stmt->fetch(); 

      $stmt = $db->query("SELECT * FROM typy_kontaktu WHERE id_typy_kontaktu = $row_kontakty[id_typy_kontaktu]"); 
      $row_id_typy_kontaktu = $stmt->fetch(); 

      echo "<tr align='left'>"; 
      echo "<td><span style='color:white'><strong>Kontakt: </strong></span></td>"; 
      echo "<td><em><strong>&nbsp&nbsp$row_id_typy_kontaktu[nazev]:</strong></em> $row_kontakty[kontakt]</td>"; 
      echo "</tr>"; 

但我的代碼打印只有一個人聯繫,但人有幾個聯繫人,我需要打印所有人。

希望你明白我想說的話。 Thx尋求答案:)

+0

爲$ DB一個PDO對象? –

+0

不,它不是......你是什麼意思? –

+1

$ db的類型是什麼? –

回答

3

你需要學習一些關於如何使用PHP數據庫的基礎知識,因爲你的代碼非常糟糕。使用PHP中的數據庫查找SQL基礎知識教程。

你的代碼:

  • 使用SQL查詢和查詢只有一次參加;

  • 使用PHP代碼的循環遍歷查詢結果中的行,像

    while ($row = $stmt->fetch()) 
    { 
        echo ...; 
    }
  • 逃逸數據與htmlspecialchars()以避免跨站點腳本漏洞;

  • 使用帶有綁定參數的預準備語句來避免SQL注入漏洞(如果您的代碼易受攻擊,取決於誰可以控制變量,但您應該始終使用綁定參數以防萬一)。

0

+1與Tometzky我還要加上你最好使用命名形式singuar卵圓形不規則複數你用簡單的英語表(這是我的觀點,但要求互聯網上的幫助時,它是一種簡單,我也不是英語母語的人)。

使用像Pomm這樣的現有對象模型管理器可以讓您的生活更輕鬆。如果你知道你在生產中使用Postgresql,你可能想從其面向對象的特性中受益,並在一個查詢中獲取整個連接。

使用POMM,你可以寫:

$sql = <<<SQL 
SELECT 
    c.*, 
    array_agg(ct) AS contact_types 
FROM 
    kontakty c 
    LEFT JOIN typy_kontaktu ct USING (id_typy_kontaktu) 
WHERE 
    id_osoby = ? 
GROUP BY 
    c.id_typy_kontaktu 
SQL; 

$results = $connection 
    ->getMapFor('Database\Schema\Kontakty') 
    ->find($sql, array($row[id_osoby])); 
?> 
<ul> 
<?php foreach($results as $kontakt): ?> 
    <li> 
    <p><?php echo $kontact['name'] ?>: 
     <ul> 
<?php foreach($kontakt['contact_types'] as $contact_type): ?> 
     <li><?php echo $contact_type['type'] ?> : <?php echo $contact_type['value'] ?></li> 
<?php endforeach ?> 
     </ul> 
    </p> 
    </li> 
<?php endforeach ?> 
</ul>