このクエリに問題があります。誰かがこれを修正するのを手伝ってくれることを願っています。新しいユーザーを自分のサイトに登録するときに、ユーザー名と電子メール アドレスが登録可能であることを確認しようとしています。ユーザー名はログイン テーブルから取得され、電子メール アドレスは連絡先テーブルから取得されます。ここで、指定されたユーザー名と、新しいユーザーが登録できる電子メールを確認するためのクエリを作成する必要があります。それらが利用できない場合、エラーメッセージを出力したいと思います。このクエリをこのようなものにしようとしていますが、期待どおりに機能しません。
$q = "SELECT username, email FROM login 
      INNER JOIN contact 
      WHERE login.username = '$username' OR contact.email = '$email'";
次に、このクエリを PHP で次のようにチェックしています。
$r = mysqli_query ($dbc, $q);
// Get the number of rows returned:
$rows = mysqli_num_rows($r);
if ($rows == 0) { // No problems!
   // register new user 
} else { // The email address or username is not available.
    if ($rows == 2) { // Both are taken.
    $reg_errors['email'] = 'This email address has already been registered.1';          
    $reg_errors['username'] = 'This username has already been registered.2';            
    } else { // One or both may be taken.
                // Get row:
                $row = mysqli_fetch_array($r, MYSQLI_NUM);
                if( ($row[0] == $_POST['email']) && ($row[1] == $_POST['username'])) { // Both match.
                    $reg_errors['email'] = 'This email address has already been registered.3';  
                    $reg_errors['username'] = 'This username has already been registered with this email address.4';
                } elseif ($row[0] == $_POST['email']) { // Email match.
                    $reg_errors['email'] = 'This email address has already been registered.5';                      
                } elseif ($row[1] == $_POST['username']) { // Username match.
                    $reg_errors['username'] = 'This username has already been registered.6';            
                }
} // End of $rows == 2 ELSE.
私の問題は、PHPスクリプトが常にこのコードに行くことです。ユーザー名と電子メールを個別にチェックしないクエリ。私はこのようなことを試しています..ユーザー名が利用できず、電子メールが利用可能で、電子メールが利用できず、ユーザー名が利用可能です。しかし、いつもこれに行く
if ($rows == 2) { // Both are taken.
$reg_errors['email'] = 'This email address has already been registered.1';          
$reg_errors['username'] = 'This username has already been registered.2';            
}
編集:テーブル構造..
# --------------
# Login Table 
# --------------
CREATE TABLE login (
login_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
username VARCHAR(80) NOT NULL, 
password VARBINARY(32) NOT NULL,
PRIMARY KEY (login_id),
UNIQUE(username) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
# --------------
# Contact Table
# --------------
CREATE TABLE contact (
contact_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
telephone VARCHAR(60) DEFAULT NULL, 
mobile CHAR(10) NOT NULL, 
email VARCHAR(80) DEFAULT NULL, 
PRIMARY KEY (contact_id),
UNIQUE (email)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;