0

これは私がPHPを試している私が初めてです。特定のユーザー名が mysql データベースで既に見つかっているかどうかを確認しようとしていますが、現在のコードは次のとおりです。

<?php
// $uname is the username I am trying to see if is the database
$uname = "djm";
//server info
$servuser = "root";
$servpass = "";
$db = "toob";
$server = "127.0.0.1";
//connecting to server
$db_handle = mysql_connect($server, $servuser, $servpass);
$db_found = mysql_select_db("toob", $db_handle);

//checking to see if ocnnected
if ($db_found) {
    print("connected");

//defining my sql statement
    $sql = "SELECT username FROM users WHERE username = $uname";
    $result = mysql_query($sql);


    if ($result) {
        print("Yes");
    } else {
        print("No");
    }
} else {
    print("Can't connect to server");
}

私は常に no を出力します。置き換えることで yes を出力することができました:

$sql="SELECT username FROM users WHERE username = $uname";
    $result=mysql_query($sql);

$sql="SELECT username FROM users WHERE username = 'djm'";
$result=mysql_query($sql);

ただし、変数を処理する必要があります。

4

3 に答える 3

4

引用符がありません:

入力を mysql クエリとして渡す前にエスケープすることをお勧めします。試す:

$sql = "SELECT username FROM users 
WHERE username = '". mysql_real_escape_string($uname)."'";

現在、クエリが正常に実行されると、「はい」と表示されます。if ($result)レコードが存在するかどうかを確認しようとしif(mysql_num_rows($result) > 0)ている場合は、に置き換えます。

無関係:関数は非推奨になりました。またはmysql_*に切り替えることをお勧めします。mysqliPDO

于 2013-07-26T16:02:29.083 に答える
1

まず、すべてのユーザー入力をエスケープする必要があります。

$username = mysql_real_escape_string($uname);

次に、SQL 値を引用符で囲む必要があります。

$sql="SELECT username FROM users WHERE username = '$username'";

あなたの質問から少し離れて; PHPのWebサイトから参照されたmysqlの何か:「この拡張機能はPHP 5.5.0の時点で非推奨であり、将来削除されるため、新しいコードを書くことはお勧めしません。」

mysqliを使用する方が良いでしょう

于 2013-07-26T16:04:37.773 に答える