2011-02-17 36 views
1

好的,也許我有點過度,但我不明白爲什麼這不起作用!我的網站上有一個評論框,其中包含發佈人的個人資料。我只想在個人資料中顯示他們的帖子。他們的個人資料頁面是用戶userinfo.php =(任何)

該查詢失敗:

$query = "SELECT message,`date`,ip,name,website,id 
      FROM `guestbook_message` 
      WHERE name=" . intval($_GET['user']) . " 
      AND deleted=0 
      ORDER BY `date` DESC"; 
+0

它是如何失敗?你可以在多行上發佈查詢嗎? – 2011-02-17 21:59:45

+1

這個查詢很好,還有別的東西讓你煩惱。 – Ish 2011-02-17 22:02:19

+0

您是否嘗試將最終查詢運行到phpMyAdmin或您用於管理數據庫的任何系統中? – 2011-02-17 22:04:28

回答

2

試試這個:

$name = intval($_GET['user']); 

$query = "SELECT message,date,ip,name,website,id 
      FROM guestbook_message 
      WHERE name='" .$name. "' 
      AND deleted=0 
      ORDER BY date DESC"; 
$result = mysql_query($query) or die(mysql_error()); 
0

假設你正在使用mysql_query()執行查詢,你有沒有檢查查詢是否成功?

$query = "SELECT ..."; 
$result = mysql_query($query) or die(mysql_error()); 

如果查詢失敗並且告訴您查詢失敗的原因,則會強制腳本中止。

5

您正在獲取用戶的名稱並將其直接轉換爲整數,然後將其與名稱進行比較。這根本不符合邏輯。

如果$_GET['user']是用戶的ID,則將其與ID而不是name進行比較。

如果$ _GET ['user']是用戶的用戶名,那麼您必須將用戶名值附加引號。由於UserName值是一個字符串,因此需要將其封裝在引號中並刪除intval。這樣做:

$query = "SELECT message,`date`,ip,name,website,id 
      FROM `guestbook_message` 
      WHERE name='" . mysql_real_escape_string($_GET['user']) . "' 
       AND deleted=0 
      ORDER BY `date` DESC"; 
0

有一點需要注意的是,在查詢中直接使用$ _GET會導致SQL注入攻擊。

考慮在構建SQL語句之前清理輸入,或使用PDO/Prepared語句。