2011-04-03 47 views
0

试图从评论表中拉字段的'信息'和'日期'。拉字段错误 - Php/Sql

两个表: professor Comment

<?php 
$pID2 = filter_input(INPUT_GET, 'pID', FILTER_SANITIZE_NUMBER_INT); 
     $username = "###"; 
     $password = "####"; 
     $pdo2 = new PDO('mysql:host=localhost;dbname=###', $username, $password); 
     $pdo2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $sth2 = $pdo2->prepare(' 
      SELECT info, date 
      FROM Professor, Comment 
      WHERE Professor.pID = ?'); 
     $sth2->execute(array(
      $pID2 
     )); 
?> 

虽然声明

while($row = $sth2->fetch(PDO::FETCH_ASSOC)) { 
       echo "<div class='comment'>by Anonymous on {$row['date']}: <br> {$row['info']} </div>"; 
       } 

的问题是,它会得出结果,但它显示了所有教授的这两个相同的评论。有没有错误在这里没有调用一个独特的教授给予pID=[somenumber]在url?

回答

1

实际的SQL代码应该是: -

$sth2 = $pdo2->prepare(' 
      SELECT info, date 
      FROM Comment 
      JOIN Professor ON Professor.pID = Comment.pID 
      WHERE Comment.pID = ?'); 

你需要把一个JOIN statementProfessor表。

希望它有帮助。

更新: -
应该已经提供的另一个检查(如在评论提到由OP)。如果没有找到行,那么row count检查应作为: -

if ($sth2->rowCount()) { 
    while($row = $sth2->fetch(PDO::FETCH_ASSOC)) { 
    echo "<div class='comment'>by Anonymous on {$row['date']}: <br> {$row['info']} </div>"; 
    } 
} 
else { 
    echo "<div class='unavailable'>No Comments Found!</div>"; 
} 

这是一件好事,有这种行数的检查。 比编码错误更好地检查。运气最好!

+0

这很好,但是,如果没有找到结果,有没有简单的方法可以发出信息? – Jshee 2011-04-03 23:34:32

+0

知识 - 令人惊叹。谢谢! – Jshee 2011-04-04 00:08:06

+0

@woopie - 干杯! – 2011-04-04 07:15:13