2013-11-21 28 views
-1

在MySQL中,如何選擇一列的數據,僅用於其他列中同一行值爲session_id的行(我想要所有的值,而不僅僅是在一列中選擇多行

我曾嘗試這第一個):

SELECT column_name FROM table_name WHERE ID = $session_id 

...但它這麼想的工作。它只選擇第一行。

編輯,我正在使用的代碼。

<?php 
    $dn = mysql_query("SELECT IDcontact FROM contacts WHERE ID = '".$_SESSION['id']."'"); 
    if(mysql_num_rows($dn)>0) 
    { 
     $dnn = mysql_fetch_array($dn); 
     $req = mysql_query("select TitreEvent, DescriptionEvent, MomentEvent, image_small from users_event where Confidentialite = 'Public' and ID = " . $dnn['IDcontact']); 
       while($dnn = mysql_fetch_array($req)) 
       { 
?> 

所以花費爲例,接觸/朋友(IDcontact)的值,形成所述數據庫«接觸»,其中所記錄的用戶的ID是。我想要的是輸出所有IDcontact的事件,事實上,它只輸出添加的最近朋友的事件,女巫是...«聯繫人»數據庫的第一行。

+2

你應該發佈一些更多的相關信息,如表中的一些數據和所需的結果。 –

+1

該查詢中沒有任何內容將結果限制爲一行;假設表中有*行,並且有所需的會話ID,則應該將它們全部取出。 – Wyzard

+1

...這導致我們相信只有一行'ID = $ session_id' –

回答

1

mysql_fetch_array()函數只返回查詢結果集中的一行。如果要獲取查詢生成的所有行,則必須在循環中調用它:

while ($row = mysql_fetch_array($dn)) { 
    // Do stuff with $row... 
} 

此外,此功能已被棄用。您應該使用mysqliPDO來運行您的查詢。有關更多信息,請參閱choosing an API上的PHP文檔。


既然你編輯你的問題,以顯示你正在運行基於第一個結果的第二個查詢,請注意,你可以做IDcontact查找都和得到users_event信息在一個單一的查詢由joining兩個表:

select TitreEvent, DescriptionEvent, MomentEvent, image_small 
from users_event 
join contacts 
    on contacts.IDcontact = users_event.ID 
where contacts.ID = $session_id 

最後但並非最不重要的,任何時候你插入變量(如您的session_id)到數據庫查詢,你需要銘記SQL injection。如果會話ID來自用戶可以控制的參數(例如瀏覽器cookie),則攻擊者可能會發送包含SQL代碼的惡意會話ID,以便在數據庫中運行任意查詢。爲了安全,你首先應該創建一個具有佔位其中參數應該去一個準備好的聲明

... where contacts.ID = ? 

,然後在session_id變量插入後作爲「綁定參數」。 mysqli和PDO都提供了這樣的方法:mysqli_stmt_bind_paramPDOStatement::bindParam