0

PHPログインスクリプトがあります。これは、その人が新しいユーザーを作成できる部分です。私の問題は、ユーザーが存在するかどうかを確認し、ユーザー名がテーブルに存在しない場合は、新しいユーザーを作成することです。ただし、ユーザーが存在する場合は、セッション変数でエラーを返すようにします。ここに私が今持っているコードがあります。これには私の DB 接続は含まれていませんが、動作することはわかっています。error_lognum_rows()ファイルにエラーとして書き込まれています。コードは次のとおりです。

$username = mysql_real_escape_string($username);
$query = "SELECT * FROM users WHERE username = '$username';";
$result = mysql_query($query,$conn);
if(mysql_num_rows($result)>0) //user exists
{
    header('Location: index.php');
    $_SESSION['reg_error']='User already exists';
    die();
}
else
{
$query = "INSERT INTO users ( username, password, salt )
        VALUES ( '$username' , '$hash' , '$salt' );";
mysql_query($query);
mysql_close();
header('Location: index.php');

それが私に与えているエラーは

mysql_num_rows(): supplied argument is not a valid MySQL result resource in [dirctory name]
4

3 に答える 3

1

mysql_num_rows ()

結果セットから行数を取得します。このコマンドは、実際の結果セットを返す SELECT や SHOW などのステートメントに対してのみ有効です。INSERT、UPDATE、REPLACE、または DELETE クエリによって影響を受ける行数を取得するには、mysql_affected_rows() を使用します。

SELECT *mysql_num_rows() を実行してから mysql_num_rows() を実行する代わりに、フィールド (0 または 1 である必要があります) をフェッチすることにより、行数を取得できますSELECT COUNT(*)。SELECT COUNT は常に結果を返します (もちろん、クエリ構文が正しい場合)。

また、クエリを変更します。

$query = "SELECT * FROM users WHERE username = '$username';";

の中へ

$query = "SELECT * FROM users WHERE username = '" 
    . mysql_real_escape_string($username)  . "';";
于 2011-10-12T02:54:15.983 に答える
0
 $username = mysql_real_escape_string($username);

上記をに置き換える必要があると思います

$username = mysql_real_escape_string($_POST[$username]);
于 2011-10-12T03:38:46.197 に答える
0

アップサートについて聞いたことがありますか? IE、「重複キーに挿入」。少なくともユーザー名列が一意のキーである場合、この状況で役に立ちます。

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

于 2011-10-12T02:58:51.547 に答える