在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)的值,形成数据库«contacts»,其中记录用户的ID是。我想要的是输出所有IDcontact的事件,实际上,它只输出最近添加的朋友的事件,女巫是......«contacts»数据库的第一行。
答案 0 :(得分:1)
mysql_fetch_array()
函数只返回查询结果集中的一行。如果要获取查询生成的所有行,则必须在循环中调用它:
while ($row = mysql_fetch_array($dn)) {
// Do stuff with $row...
}
此外,不推荐使用此功能。您应该使用mysqli或PDO来运行查询。有关详细信息,请参阅choosing an API上的PHP文档。
由于您编辑了问题以显示您正在根据第一个查询的结果运行第二个查询,请注意您可以同时执行IDcontact
查找和 joining两个表的单个查询中的users_event
个信息:
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_param
和PDOStatement::bindParam
。