2013-11-21 29 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