0

ユーザー名がデータベースに存在するかどうかを確認するコードを作成しました。同じユーザー名が存在する場合でも、そのようなユーザー名は存在しないと返されるようです。

$conu=mysqli_connect("localhost","db_user","db_pass","db_name");
$result = mysql_query("SELECT 1 FROM member WHERE username = $username");
if ($result && mysql_num_rows($result) > 0) {
$user_err = "<i><span class='error'>Usernme already exists</span></i>";
    $errflag = true;
}
elseif(preg_match("/^[0-9a-zA-Z_]{5,}$/", $username) === 0) {
    $user_err = "<i><span class='error'>Usernme must be bigger than 5 chararacters and can contain only digits, letters and underscore</span></i>";
    $errflag = true;
}
4

4 に答える 4

3

試す

mysql_query("SELECT username FROM member WHERE username = '$username' LIMIT 1;");

SELECT 1実際にはデータベースを使用していません。常に を返すため、テーブル1の内容に関係なく、結果が常に同じになるのはなぜですか。member

于 2013-09-14T16:22:03.623 に答える
0

私が取っているユーザー名は、ある種の varchar ですか? その場合は、その値を引用符で囲みます。

$result = mysql_query("SELECT `username` FROM `member` WHERE `username` = '".$username."' LIMIT 1;");

あなたのクエリはSQLインジェクションの対象です。

于 2013-09-14T16:23:42.917 に答える
0
  1. mysqli を使用して接続していますが、mysql を使用してクエリを実行しています。
  2. するとSELECT 1 FROM member WHERE username = $username、結果は常に になります1
  3. $usernameクエリを引用符で囲む必要があります。のようなものSELECT username FROM member WHERE username = '$username'
  4. 投稿にそのようなユーザー名がない場合のコードの一部を含めるのを忘れました。
于 2013-09-14T16:29:12.863 に答える