【发布时间】:2013-06-27 07:26:28
【问题描述】:
所以,我正在尝试创建一个名为“shoutout”的区域,当前用户可以在其中查看“shoutout”,基本上是来自与他/她的朋友的人在shoutout 表中的消息。
所以,我首先将当前用户的所有朋友放入一个名为“currentuserfriends”的数组中,然后我希望从用户名=“currentuserfriends”中的所有用户的shoutout表中选择消息。
但是我不知道如何在 select 语句中循环,
我不想做类似的事情,
string getuserfriendlist = "SELECT friend FROM friend WHERE username = '" + currentuserfriends[0] + "'";
并手动增加 currentuserfriends[0]。有没有办法在单个 select 语句中循环 currentuserfriends 直到结束?谢谢。
好友桌
username | friend
喊话桌
username | message | datetime
代码:
string[] currentuserfriends = new string[9999];
string[] posternames = new string[9999];
string getuserfriendlist = "SELECT friend FROM friend WHERE username = '" + currentuser + "'";
SqlCommand cmdb = new SqlCommand(getuserfriendlist, con);
SqlDataReader drb;
drb = cmdb.ExecuteReader();
while (drb.Read())
{
string currentuserfriend = drb["friend"].ToString();
currentuserfriends[l++] = currentuserfriend;
}
drb.Close();
string getshoutout = "SELECT * FROM shoutout WHERE username = '" + currentuserfriends + "' AND username ='" + currentuser + "' order by datetime DESC";
SqlCommand cmdc = new SqlCommand(getshoutout, con);
SqlDataReader drc;
drc = cmdc.ExecuteReader();
while (drc.Read())
{
string postername = drb["username"].ToString();
posternames[m++] = postername;
}
drc.Close();
Label2.Text = posternames[0];
Label3.Text = posternames[1];
Label4.Text = posternames[2];
Label5.Text = posternames[3];
Label6.Text = posternames[4];
【问题讨论】:
-
我想报告一个错误,我创建了一个用户帐户,现在您的网站停止工作。我的用户名是
'; drop table shoutout; --(请查看使用SqlParameters,搜索一下这个网站上有很多关于它的问题。) -
)))))))) sql 注入让我开心!
-
关于主题说明,here is a different, but related, question 可能会解决您的问题。 编辑: 另一个问题,大小为 9999 的数组是什么?为什么不直接使用
List<string>? -
@ScottChamberlain:我认为
drop table是您遇到的最少问题。真正的危险是有人在您不知情的情况下接管了您的服务器或stealing all your data。 -
@Steven 是的,但是下拉表是最容易在评论空间中理解这一点的方法,不过感谢您提供的链接,我以后会用它作为一个很好的例子。