私は自分のウェブサイト用にいくつかのスクリプトを書いており、現在、ユーザー名がすでに使用されているかどうかの確認に重点を置いています。データフィールドが選択され、POSTされたデータが一致するかどうかを確認するSELECTスクリプトを記述してみました。
これが私のコードです:
$username = $_POST["username"];
$password = $_POST["password"];
{ // Check if account already exists
$Select_Account = "SELECT ";
$Select_Account .= "Username ";
$Select_Account .= "FROM UserData ";
$Select_Account .= "WHERE UserData.Username ";
$Select_Account .= "= '$username'";
$Select_Account_Query = mysql_query($Select_Account);
if ($Select_Account_Query) {
echo "Account Exists";
} else {
echo "Account does not exist";
}
}
入力した値がテーブル内にない場合、コードが "アカウントが存在しません"と表示されない問題を理解できません。
PHPとMySQLを書くのは初めてなので、まだすべてのクエリと構文を完全にスクラッチするまでには至っていません。すべてのヘルプに感謝します。
mysql_query()は、クエリに問題があり、実行に失敗した場合にのみfalseを返します。それ以外の場合、戻り値は成功と評価されるリソースです。つまり、コードは常に「アカウントの存在」をエコーします。 SELECTステートメントがフェッチした行数を確認して、ユーザーが存在するかどうかを判別します。
コードも安全ではありません。 SQLインジェクションに対して脆弱です。 PHP関数のmysql_ *ファミリを使用しないことを強くお勧めします。これらはPHP 5.5.0の時点で廃止予定であり、将来のリリースで削除される予定です。切り替えを検討してください。 mysqli_ *ファミリーの関数に移行するか、PDOでパラメーター化されたクエリを使用してください。
PDO:
$conn = new PDO('mysql:Host='.$dbhost.';dbname='.$dbname,
$dbusername,
$dbpassword);
$username = $_POST["username"];
$password = $_POST["password"];
//Query statement with placeholder
$query = "SELECT Username
FROM Userdata
WHERE Userdata.Username = ?";
//Put the parameters in an array
$params = array($username);
//Execute it
try {
$stmt = $conn->prepare($query);
$result = $stmt->execute($params);
} catch(PDOException $ex) {
echo $ex->getMessage());
}
//Now Check for the row count
if($stmt->rowCount === 1) {
echo "Account Exists";
} else {
echo "Account does not exist";
}
結果セットの行数を確認する必要があります。
if (mysql_num_rows($Select_Account_Query) > 0) {
echo "Account Exists";
} else {
echo "Account does not exist";
}