2013-01-05 79 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>