2012-05-22 89 views
0

尝试从关系表中检索相关数据,用户单击上一页上的书名后。即使在数据库中存在数据,也不会在页面上打印任何内容。从PHP数据库中检索数据

表架构是:

relationshipID,bookone,booktwo,关系,relationlike,relationdislike

<html> 
    <head> 
    <title>Retrieve Relationships</title> 
    </head> 
    <body> 

    <dl> 

    <?php 
    // Connect to database server 
    mysql_connect("latcs7.cs.latrobe.edu.au","12ice06","EsnYkuxuwh9RbtQuRcQt") or die (mysql_error()); 

    // Select database 
    mysql_select_db("12ice06") or die(mysql_error()); 
     $sTitle=0; 
    // Get data from the database depending on the value of the id in the URL 
    $title = (isset($_GET['title']) && is_string($_GET['title'])) ? $_GET['title'] : null; 
$sTitle = mysql_real_escape_string($title); 
$strSQL = "SELECT R.bookone, B.title, B.author, 
     R.booktwo, B.title, B.author, 
     R.relation, R.relationlike, R.relationdislike 
     FROM relationships R 
     INNER JOIN books B ON R.bookone = B.bookid";  

$rs = mysql_query($strSQL) or die(mysql_error()); 
    // Loop the recordset $rs 

while($row = mysql_fetch_array($rs)){ 
    // Write the data of the book 


    echo "<dt>Book One:</dt><dd>" . $row["bookone"] . "</dd>"; 
    echo "<dt>Title:</dt><dd>" . $row["title"] . "</dd>"; 
    echo "<dt>Author:</dt><dd>" . $row["author"] . "</dd>"; 
    echo "<dt>Book Two:</dt><dd>" . $row["booktwo"] . "</dd>"; 
     echo "<dt>Title:</dt><dd>" . $row["title"] . "</dd>"; 
    echo "<dt>Author:</dt><dd>" . $row["author"] . "</dd>"; 
    echo "<dt>Relationship:</dt><dd>" . $row["relation"] . "</dd>"; 
    echo "<dt>Likes:</dt><dd>" . $row["relationshiplikes"] . "</dd>"; 
    echo "<dt>Dislikes:</dt><dd>" . $row["relationshipdislikes"] . "</dd>"; 
} 

echo $strSQL; 
    // Close the database connection 
    mysql_close(); 
    ?> 

    </dl> 
    <p><a href="search_bookl.php">Return to the list</a></p> 

    </body> 

    </html> 
+1

请停止使用古代mysql_ *函数编写新代码。他们不再被维护,社区已经开始[弃用流程](http://news.php.net/php.internals/53799)。相反,您应该了解准备好的语句并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/mysqli)。如果你关心学习,[这里是一个很好的PDO相关教程](http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers)。 – DCoder

+0

不幸的是它的语言,我们被告知用于这项任务。 – user1393064

+0

你是否直接在mysql中试过这个查询?它是否返回任何行? –

回答

2
if($row = mysql_fetch_array($rs)){ 

    // Write the data of the book 
    echo "<dt>Book One:</dt><dd>" . $row["bookone"] . "</dd>"; 
    echo "<dt>Book Two:</dt><dd>" . $row["booktwo"] . "</dd>"; 
    echo "<dt>Relationship:</dt><dd>" . $row["relation"] . "</dd>"; 
    echo "<dt>Likes:</dt><dd>" . $row["relationshiplikes"] . "</dd>"; 
    echo "<dt>Dislikes:</dt><dd>" . $row["relationshipdislikes"] . "</dd>"; 
}while($row!=0); 

应该

while($row = mysql_fetch_array($rs)){ 
    // Write the data of the book 
    echo "<dt>Book One:</dt><dd>" . $row["bookone"] . "</dd>"; 
    echo "<dt>Book Two:</dt><dd>" . $row["booktwo"] . "</dd>"; 
    echo "<dt>Relationship:</dt><dd>" . $row["relation"] . "</dd>"; 
    echo "<dt>Likes:</dt><dd>" . $row["relationshiplikes"] . "</dd>"; 
    echo "<dt>Dislikes:</dt><dd>" . $row["relationshipdislikes"] . "</dd>"; 
} 
+0

没有东西印到屏幕上 – user1393064

+0

检查你的sql,你真的是指'books.bookid =关系。bookone AND relationships.bookone ='{$ sTitle}''? 'books.book_id'和'$ sTitle'?他们一样吗? – xdazz

+0

不,bookone是书桌的外键,它引用了书桌中的标题。 我试图让书名和作者打印与其他书籍的关系。 – user1393064

0

我的建议是:

a)请重新形成你的SQL语句像这样的变量:)

$strSQL = "SELECT [...] 
      WHERE books.bookid=relationships.bookone 
       AND relationships.bookone='".$sTitle."'"; 

b确保您的变量$sTitle不是空的。如果仍然存在问题,请回显整个SQL语句(echo $strSQL;)以进一步调试。

c)虽然在上面,但请重新构造整个SQL语句。下面的语句做同样的,是更可读:相反if($row = mysql_fetch_array($rs)){后输出数据的

$strSQL = "SELECT R.bookone, R.booktwo, 
       R.relation, 
       R.relationlike, R.relationdislike 
      FROM relationships R 
      INNER JOIN books B ON R.bookone = B.bookid 
      WHERE R.bookone='".$sTitle."'"; 

d),使用while语句来代替,像

while ($row = mysql_fetch_array($rs)) { 
    // Write the data of the book 
    // Insert your echos here 
} 

五)问: 是否有特定的原因表格书是INNER JOIN ed,但在条件下没有使用?

+0

这是调试器打印的内容 SELECT R.bookone,R.booktwo,R.relation,R.relationlike,R.relationdislike FROM relationships R INNER JOIN books B ON R.bookone = B.bookid WHERE R.bookone = '' – user1393064

+0

然后你的变量'$ sTitle'是空的。确保'$ _GET ['title']'确实可用。 – Bjoern