1

usersテーブルとusers_banlistテーブルがあります。

登録フォームで、フォームに入力したユーザー名がusersテーブルに存在するかどうかをすべて1つのクエリでチェックし、users_banlistテーブルにも存在するかどうかを確認したいと思います。

個別のクエリで独自に実行できますが、すべてを1つで実行したいと思います。

これが私が得たものですが、取得したユーザー名を入力しても、すでに取得されているとは表示されません。

$stmt = $dbh->prepare("
SELECT
  users.user_login,
  users_banlist.user_banlist
FROM
  users ,
  users_banlist
WHERE
  users.user_login = ? OR
  users_banlist.user_banlist = ?");

// checker if username exists in users table or users_banlist table
$stmt->execute(array($username, $username));

if ( $stmt->rowCount() > 0 ) {
    $error[] = 'Username already taken';
}

基本的に、それはexecuteまたはrowCount()と関係があると思いますが、どこが間違っているのか誰かに教えてもらえますか?pdoを初めて使用するので、現時点では少し混乱しています。

4

2 に答える 2

1

クエリを使用できます

SELECT
  users.user_login
FROM
 users 
WHERE
  users.user_login = ? 
UNION ALL
SELECT
  users_banlist.user_banlist
FROM
  users_banlist
WHERE
  users_banlist.user_banlist = ?

その後、通常どおり続行します。使用していたのは、最初のテーブルの各行と2番目のテーブルの各行を組み合わせた行を生成するデカルト積を返すCROSSJOINです。これらのテーブルの1つが0行を返す場合、0の結果が得られます

于 2012-04-14T11:04:20.350 に答える
1

代わりにSQLJOINSを使用してください

SELECT
  users.user_login,
  users_banlist.user_banlist
FROM
  users INNER JOIN
  users_banlist ON users.ID=users_banlist.user_id
WHERE
  users.user_login = ? OR
  users_banlist.user_banlist = ?

ここで、users.IDとusers_banlist.user_idは同じです

于 2012-04-14T11:24:10.203 に答える