0

これを行うためのより良い方法があるのではないかと懸念しているため、コードからこのスニペットを抽出しました。誰かが私を助けてくれるか、正しい方向に向けてくれることを願っています。

基本的に、このコードはデータベース内の多数のテーブルをチェックし、結果が返されるかどうかをチェックします。

    $stmt = $conn->prepare('SELECT email FROM 1table WHERE email = :email'); 
    $stmt = $conn->prepare('SELECT email FROM 2table WHERE email = :email');
    $stmt = $conn->prepare('SELECT email FROM 3table WHERE email = :email'); 
    $stmt->bindParam(':email', $email);
$stmt->execute();
    if($stmt->fetch(PDO::FETCH_NUM) > 0){

より良い方法はありますか?または、より生産的な方法で、結果が見つかったテーブルを教えてくれますか?

4

3 に答える 3

1

それは有効なPHPですが、あなたのロジックは有効ではありません:

$stmt = $conn->prepare('SELECT email FROM 1table WHERE email = :email'); 
$stmt = $conn->prepare('SELECT email FROM 2table WHERE email = :email');
$stmt = $conn->prepare('SELECT email FROM 3table WHERE email = :email');

$stmt新しい値で上書きし続けます。つまり$stmt、最後の準備ステートメントのみが含まれます。

UNION次のようにコードを確認して変更できます。

$sql = '(SELECT email FROM 1table WHERE email = :email)'; 
$sql .= 'UNION ALL'; 
$sql .= '(SELECT email FROM 2table WHERE email = :email)'; 
$sql .= 'UNION ALL'; 
$sql .= '(SELECT email FROM 3table WHERE email = :email)'; 
$stmt = $conn->prepare($sql);
于 2013-04-16T17:40:54.667 に答える
1

これは、最後のクエリのみを使用します。あなたはこれを行うことができます:

$stmt = $conn->prepare('
    (SELECT email FROM 1table WHERE email = :email)
    union all
    (SELECT email FROM 2table WHERE email = :email)
    union all
    (SELECT email FROM 3table WHERE email = :email)'); 
于 2013-04-16T17:42:20.770 に答える