1

主キーがユーザー名である文字列であり、フィールドが URL である mySQL データベースがあります。ユーザー名は 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付きの列を一重引用符で囲んだためです。列名は識別子であり、文字列リテラルではないことに注意してください。識別子を一重引用符で囲むと、文字列リテラルになります。したがって、あなたの場合、値をusername列名ではなく文字列と比較していますusername。一重引用符を削除すると、確実に機能します。

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

これを試して、$_GET["username"]withUsernameに値を渡すと、テーブル内のすべてのレコードが取得され'Username' = 'Username'ます。これにより、常に true になります。

補足として、変数のSQL Injection値が外部から取得された場合、クエリは脆弱です。予防方法については、以下の記事をご覧ください。を使用すると、値を一重引用符で囲む必要がなくなります。PreparedStatements

于 2013-03-29T04:18:49.733 に答える