MySQL如何从URL传递的参数中获取列

时间:2013-03-29 04:16:47

标签: php mysql sql select

我有一个mySQL数据库,其中主键是一个字符串,它是一个用户名,一个字段是一个URL。用户名通过网址传递,网址打印出来。但是,我无法让代码工作。我做错了什么?

<html>
    <head>
    <title>Query string</title>
    </head>
    <body>
    <?php
    $con = mysql_connect("na","na","na");
    if (!$con)
    {
    die('Could not connect: ' . mysql_error());
    }
    mysql_select_db("na", $con); 
    $query="SELECT * FROM  `na`.`na` WHERE 'Username' = '" . $_GET["username"] . "'";
     $data = mysql_query($query) or die('Could not connect: ' . mysql_error());
     while($info = mysql_fetch_array($data)) 
 { 
Print "URL>>".$info['Url'] . "URL>>" ; 
 } 
    ?>
    </body>
    </html> 

1 个答案:

答案 0 :(得分:1)

您的查询无效的原因是您使用单引号包装名为Username的列。请记住,列名是标识符,而不是字符串文字。使用单引号包装标识符使其成为字符串文字。因此,在您的情况下,您将值与字符串username进行比较,而不是与列名username进行比较。删除单引号肯定会有效。

SELECT * FROM  `na`.`na` WHERE Username = ''

尝试这一次,在$_GET["username"]中使用Username传递一个值,您将获得表中的所有记录,因为'Username' = 'Username'使其始终为真。

作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。