1

我有一个 mySQL 数据库,其中主键是一个字符串,它是一个用户名,一个字段是一个 URL。用户名通过url传递,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> 
4

1 回答 1

1

您的查询不工作的原因是因为您已经Username用单引号包裹了命名的列。请记住,列名是标识符而不是字符串文字。用单引号包裹标识符使其成为字符串文字。因此,在您的情况下,您将值与 stringusername而不是 column name进行比较username。删除单引号,它肯定会工作。

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

$_GET["username"]试试这个,在with中传递一个值,Username你会得到表中的所有记录,因为'Username' = 'Username'它总是正确的。

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

于 2013-03-29T04:18:49.733 回答