2012-05-22 71 views
1

我想從我的數據庫中的關係表中調用書的詳細信息,mysql是用代碼的語法拋出一個錯誤。前一頁是mysql不喜歡我的聲明

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

    <dl> 

    <?php 
    // Connect to database server 
    mysql_connect("localhost","","") or die (mysql_error()); 

    // Select database 
    mysql_select_db("test") or die(mysql_error()); 

    // 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 relationships.bookone, relationships.booktwo, relationships.relationship 
FROM relationships, books 
WHERE books.bookid=relationships.bookone AND relationships.bookone='{$sTitle}'"; 
    $rs = mysql_query($strSQL) 
    // Loop the recordset $rs 

    while($row = mysql_fetch_array($rs)){ 

     // Write the data of the person 
     echo "<dt>Book One:</dt><dd>" . $row["bookone"] . "</dd>"; 
     echo "<dt>Book Two:</dt><dd>" . $row["booktwo"] . "</dd>"; 
     echo "<dt>Relationship:</dt><dd>" . $row["relationship"] . "</dd>"; 
     echo "<dt>Likes:</dt><dd>" . $row["relationshiplikes"] . "</dd>"; 
     echo "<dt>Dislikes:</dt><dd>" . $row["relationshipdislikes"] . "</dd>"; 

    } 

    // Close the database connection 
    mysql_close(); 
    ?> 

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

    </body> 

    </html> 

什麼即時試圖去顯示的頁面是bookone的代碼和booktwo的代碼,其中bookones ID = booksid

任何幫助,將不勝感激

+2

更改到'$ RS =請求mysql_query($ STRSQL)或死亡(mysql_error());',看看它說: –

+1

你把到查詢變量如果它是一個字符串,則需要使用單引號。此外,您的代碼已經開放給SQL注入。 – Corbin

+0

你沒有在你的查詢中關閉這個單引號:''{$ sTitle}' – Okonomiyaki3000

回答

2

它應該是:

$strSQL = "SELECT relationships.bookone, relationships.booktwo, relationships.relationship 
FROM relationships, books 
WHERE books.bookid=relationships.bookone AND relationships.bookone='{$_GET['bookone']}'"; 

雖然,真的,它應該是:

$title = (isset($_GET['title']) && is_string($_GET['title'])) ? $_GET['title'] : null; 
$sTitle = mysql_real_escape_string($title); 
$strSQL = "SELECT relationships.bookone, relationships.booktwo, relationships.relationship 
FROM relationships, books 
WHERE books.bookid=relationships.bookone AND relationships.bookone='{$sTitle}'"; 

SQL injection比較差:)。

(更何況,如果用戶搜索一本書的標題撇號,將無害也打破)。

+0

它現在拋出一個這行代碼的問題,說Warning:mysql_fetch_array()期望參數1到 while($ row = mysql_fetch_array ($ sTitle)或死(mysql_error())) – user1393064

+0

感謝您的幫助btw! – user1393064

+0

@ user1393064您仍然需要將$ rs傳遞給mysql_fetch_array,而不是$ sTitle。 $ sTitle包含轉義標題,而不是mysql_fetch_array需要的查詢資源。 – Corbin

0

看來你並不需要爲這個表的連接。你根本沒有使用書桌。它看起來像所有你需要的是:

SELECT r.bookone, r.booktwo, r.relationship FROM relationships AS r WHERE r.bookone='{$sTitle}' 

但後來你所使用的你是不是與此查詢拿起列relationshiplikesrelationshipdislikes。因此,也許你真正想要的是這樣的:

SELECT r.* FROM relationships AS r WHERE r.bookone='{$sTitle}' 
+0

一旦我得到了bookone和booktwo工作,我打算加入其餘的 – user1393064

+0

是否你需要整個關係行?然後只是'SELECT r。*'而不是這些特定的列。 – Okonomiyaki3000

+0

有一個relationshipid,我不想顯示,它只在系統中用於數據庫目的 – user1393064