0

私の本当にばかげた質問をしてすみません(私はこれでとても新しいです!)。

私はクエリを持っています(mysql、プログラミング言語はphpです):

mysql_query("INSERT INTO user (id, f_name, l_name, email, user_name, password, b_day, gender, country, p_number, address, active)
VALUES ('NULL', '$_POST[fname]', '$_POST[lname]', '$_POST[email]', '$_POST[username]', '$_POST[password]', '$_POST[bday]', '$gender', '$_POST[country]', '$_POST[phone]', 'address', '0')")


or die("The username already exist");

私はそれにいくつかの条件を適用する必要があること、sthのような...

if (mysql_query done inserting successfully){
// do 1-
// 2-
// 3-
// 4-
}

else {die("The username already exist");
//and do 
// 1-
// 2-
// 3-
// 4-

}

ちなみに、私はmysqlデータベースでユーザー名を一意に設定しているので、誰かが同様のsthを挿入したい場合にエラーが発生し、ユーザーがすでに存在しているのでそれをキャッチします。

これどうやってするの?

4

3 に答える 3

1

MySQLで一意のキー制約にぶつかると、エラーがスローされ、PHPがエラーをスローします。これはログに表示され、コードで何かをするのを忘れたことを意味します。INSERTステートメントを試行する前に、別のSELECTクエリを実行して、ユーザーがすでに存在するかどうか(検証)を確認する必要があります。

于 2012-10-03T01:31:15.897 に答える
1

mysql_*関数の使用はお勧めしません。MySqliまたはPDOの使用方法を学ぶ必要があります。しかし、私はあなたの質問に答えるだけです。

$qry = mysql_query("...");
if ($qry)
{
    //do 1-2-3-4
}
else
{
    //did not insert
}

また、何かを挿入する前に、ユーザーがすでに存在するかどうかを確認するクエリを実行できます。

これらの$_POSTSをサニタイズしてクリーンアップする必要があります。

于 2012-10-03T01:37:22.680 に答える
1

ユーザー名が存在するかどうかを確認する場合は、事前にselectステートメントを実行する必要があります

SELECT * FROM user WHERE username = 'xxx'

そのクエリを実行したら、mysql_num_rows(またはmysqli_num_rows)を使用して返される行数をカウントすることにより、ユーザー名が存在するかどうかを確認します。

$result = mysql_query("SELECT * FROM user WHERE username = 'xxx'", $link);
$num_rows = mysql_num_rows($result);
if ($num_rows == 0) {
    mysql_query("INSERT INTO user (id,f_name,l_name,email,user_name,password,b_day,gender,country,p_number,address,active) VALUES ('NULL','$_POST[fname]','$_POST[lname]','$_POST[email]','$_POST[username]','$_POST[password]','$_POST[bday]','$gender','$_POST[country]','$_POST[phone]','address','0')")
} else {
    die("The username already exist");
}

提案:

  • mysqlの代わりにmysqliを使用してください
  • mysqli_real_escape_string(http://www.php.net/manual/en/mysqli.real-escape-string.php)を使用して、DBに挿入するために指定された入力をエスケープします。
于 2012-10-03T01:38:13.833 に答える