我有一个包含列
的表GroupID | GroupName | GroupDesc | Overs |
-----------------------------------------
1 | Test Group|Description| Yes |
我有一个名为list.php的页面,它当前在groups表(上面)中为数据库中的每一行创建了一个URL。
代码不是最漂亮的,但我认为这是他的代码
list.php的
<?php
$result = mysql_query("SELECT * FROM groups");
while($row = mysql_fetch_array($result))
{
echo "<div class=\"divider\">";
echo "<a href=\"group.php?id=";
echo $row['GroupID'];
echo "\">";
echo $row['GroupName'];
echo "</a>";
echo "<br><br>";
echo $row['GroupDesc'];
echo "<br>";
echo "Over 18's: ";
echo $row['AgeRes'];
echo "</div>";
}
?>
然后创建一个URL,例如http://domainname.com/group/group.php?id=1
这是我的问题所在 - 如何使用网址中的ID部分从上面的数据库中选择相关行?
我的第二个问题是我们如何阻止这种SQL注入?
我对这一切都很陌生,所以我很乐意在这个和任何好的阅读资源上得到答案,这样我就可以进一步发展我的技能。
由于
答案 0 :(得分:1)
要回答第一个问题,您需要在查询中使用where子句。我不确定我使用的列名是否正确,但我相信你明白了。免费提供很棒的在线交互式SQL教程,您可以用它来了解如何编码查询。
要回答第二个问题,您可以使用mysql_real_escape_string()
函数来整理传递的变量。但是,更好的方法是更改连接到数据库的方式。 PDO和mysqli都可以更好地连接到数据库。你应该考虑学习这些 - 特别是如果你刚开始的话。
<?php
$id=mysql_real_escape_string($_GET['id']);
$result = mysql_query("SELECT * FROM groups where id=".$id.";");
// Am not 100% sure if that is the right column name to use for your database.
while($row = mysql_fetch_array($result))
{
echo "<div class=\"divider\">";
echo "<a href=\"group.php?id=";
echo $row['GroupID'];
echo "\">";
echo $row['GroupName'];
echo "</a>";
echo "<br><br>";
echo $row['GroupDesc'];
echo "<br>";
echo "Over 18's: ";
echo $row['AgeRes'];
echo "</div>";
}
?>
答案 1 :(得分:1)
Q1:您需要检索请求变量并包含在SQL查询中:
$result = mysql_query("SELECT * FROM groups WHERE id = '" . $_GET['id'] . "'");
Q2:在包含在您的查询中之前,您应该首先转义该值:
$id = (int)mysql_real_escape_string($_GET['id']);
然后将您的查询更改为以下内容:
$result = mysql_query("SELECT * FROM groups WHERE id = '" . $id . "'");