2011-11-14 48 views
1

我從一個頁面media_main.php通過傳遞「ID」值到另一個player.php:SELECT ID其中,ID等於傳遞的值

<a href="javascript:;" onclick="return popitup('player.php?pid=<?php echo ("$row->id");?>')" title="Listen"> 

在player.php頁,我想選擇某些數據WHERE ID等於傳遞的ID。到目前爲止,我有這個:

$query = "SELECT id, media_date, media_title, given_by, filename FROM media WHERE id = ?? ORDER BY id DESC"; 

我不知道如何工作的WHERE子句,因爲它會改變,而不是一個靜態的數字。我只想在id等於傳遞的id值時選擇數據。

回答

2

除了Clive的迴應,如果您知道ID只是數字,您可以將其轉換爲Integer而不是轉義它。

如果有任何錯誤輸入它只是將它轉換爲0。

$pid = (int) $_GET['pid']; 

$query = "SELECT id, media_date, media_title, given_by, filename FROM media WHERE id = '$pid' ORDER BY id DESC"; 
+0

+1爲引號;) – Clive

+0

@Clive事實上,在*這個*代碼中引號是完全沒用的。 –

+0

@ Col.Shrapnel:是的,你說得對,Dimme和我很好地搞砸了我們之間的這個:) – Clive

2

從代碼的外觀,您通過URL參數(pid)傳遞ID,在這種情況下,您只需要轉義字符串以防止SQL注入並使用生成的id生成查詢:

$pid = mysql_real_escape_string($_GET['pid']); 

$query = "SELECT id, media_date, media_title, given_by, filename FROM media WHERE id = '$pid' ORDER BY id DESC"; 

這可能是明智的,檢查傳遞的值是數字。

而且,如果id是主/唯一鍵,那麼你可以從查詢中刪除ORDER BY條款,因爲它會使沒有什麼區別。在下面的意見建議包括對SQL參數報價

編輯 答案已被更新。

+0

這個代碼是容易在查詢的SQL注入 –

+0

$ PID應該像「$ PID」 – Dimme

+0

@ Col.Shrapnel:嗯,我看不到它,漏洞在哪裏? – Clive