使用URL中的ID从mySQL中选择数据

时间:2012-07-24 22:17:09

标签: php mysql url sql-injection

我有一个包含列

的表
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注入?

我对这一切都很陌生,所以我很乐意在这个和任何好的阅读资源上得到答案,这样我就可以进一步发展我的技能。

由于

2 个答案:

答案 0 :(得分:1)

要回答第一个问题,您需要在查询中使用where子句。我不确定我使用的列名是否正确,但我相信你明白了。免费提供很棒的在线交互式SQL教程,您可以用它来了解如何编码查询。

要回答第二个问题,您可以使用mysql_real_escape_string()函数来整理传递的变量。但是,更好的方法是更改​​连接到数据库的方式。 PDOmysqli都可以更好地连接到数据库。你应该考虑学习这些 - 特别是如果你刚开始的话。

<?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 . "'");