1

私は、フォームから受け取ったデータを1つのテーブルに挿入する方法を、受け取ったデータが別のテーブルに存在する場合にのみ理解しようとしてきました。データが存在しない場合は、別のクエリに移動し、受信したデータについて別のテーブルをチェックします。

これが私がやろうとしていることです:

function addNewUser($username, $password, $email, $actcode){
    $time = time();

    $q = "UPDATE ".TBL_RELEASE_CODES." SET code = '$actcode' WHERE code = '$actcode'";
    $result = mysql_query($q, $this->connection);
    if (!$result || (mysql_numrows($result)) == 0){
        $q = "INSERT INTO ".TBL_RELEASE_USERS." VALUES ('$username', '$password', '0', $ulevel, '$email', '$actcode', $time)";
        return mysql_query($q, $this->connection);
    }

これの目的は、ユーザーが特別なコードを送信すると、システムがチェックを実行して、コードが特定のテーブルに属しているかどうかを確認することです。

送信されたコードがテーブルで見つかった場合は、チェックに関連付けられた挿入クエリを実行します。見つからなかった場合は、壊れて、一致するものが見つからなかったことを示すエラーを返します。

Google検索から情報を検索してテストしているため、コードを誤って使用している可能性があります。まだ運がない。

このコードは、PHP5とMySQLを使用してWebサイトから実行されています。

4

1 に答える 1

0

最初のクエリは何もしません-コードがすでに$actcodeである行でのみコードを$actcodeに設定します。UPDATEではなくSELECTを使用する必要があります。

$q = "SELECT COUNT(*) FROM ".TBL_RELEASE_CODES." WHERE code = ?";
$stmt = mysqli_prepare($this->connection, $q);
mysqli_stmt_bind_param($stmt, 's', $actcode);
mysqli_stmt_bind_result($stmt, $count);
mysqli_execute($stmt) or die "Query failed: ".mysqli_stmt_error($stmt);
mysqli_stmt_fetch($stmt);
if ($count == 1) {
  // Insert into TBL_RELEASE_USERS
} else {
  // Return error saying no match found
}

また、mysql_XXX関数は使用しないでください。これらは非推奨であり、SQLインジェクション攻撃を回避するのが困難になっています。上記の私のコードはmysqli_XXXを使用しています。これは、それを防ぐためにプリペアドステートメントをサポートしています。必要に応じてOOスタイルのAPIもありますが、上記では使用しませんでした。

于 2012-09-25T01:50:36.227 に答える