簡體   English   中英

查找具有匹配值的MySQL表並更新字段

[英]Find MySQL table with matching value and update field

我創建了一個注冊驗證系統,在該系統中,用戶會收到一封帶有鏈接的電子郵件,以驗證其帳戶。 單擊鏈接后,將其帶到下面的PHP頁面:

<?php
$passkey = trim(mysqli_real_escape_string($connection, $_GET['passkey']));

$query = "UPDATE pims SET com_code=NULL WHERE com_code='$passkey' UNION ALL UPDATE dms SET com_code=NULL WHERE com_code='$passkey' UNION ALL UPDATE users SET com_code='$passkey'";

$result = mysqli_query($connection, $query);
    if (!result) {
        die("Database query failed: " . mysqli_error($result));
    }

if (mysqli_num_rows($result) == 0) {
    echo '<div>Sorry. Something went wrong! Please contact the site admin at <a href="mailto:support@domain.com">support@domain.com</a> for assistance.</div>';

} else {
    echo '<div>Your account is now active. You may now <a href="login.php">Log in</a></div>';
}
?>

我想將com_code設置為NULL,但是首先我需要通過匹配$ passkey變量在3個表中的1個(pims,dms和users)中找到用戶。

這是行不通的。 有什么建議么?


更新:

正如Sean所指出的,我修復了代碼:

$query = "UPDATE pims SET com_code=NULL WHERE com_code='$passkey' 
UNION ALL UPDATE dms SET com_code=NULL WHERE com_code='$passkey' 
UNION ALL UPDATE users SET com_code=NULL WHERE com_code='$passkey'";

但是,它仍然無法正常工作。


更新:

我再次更新了代碼,如下所示:

<?php
    $passkey = mysqli_real_escape_string($connection, $_GET['passkey']);

    $query = "UPDATE pims, dms, users SET pims.com_code=NULL, dms.com_code=NULL, users.com_code=NULL WHERE pims.com_code='$passkey' AND dms.com_code='$passkey' AND users.com_code='$passkey'";

    $result = mysqli_query($connection, $query);
        if (mysqli_affected_rows ($connection) > 0) {
            echo '<div>Your account is now active. You may now <a href="login.php">Log in</a></div>';
        } else {
            echo '<div>ERROR MESSAGE<br><br>Sorry, something went wrong!<br><br>Please contact the site admin at <a href="mailto:support@domain.com">support@domain.com</a> for assistance.</div>';
    }

    mysqli_close($connection);
?>

但是由於某種原因,它無法連接。


更新:

因此,我決定進行以下3個查詢:

<?php
    $passkey = mysqli_real_escape_string($connection, $_GET['passkey']);

    $query = "UPDATE pims SET com_code=NULL WHERE com_code='{$passkey}'";

    $result = mysqli_query($connection, $query);
        if (mysqli_affected_rows ($connection) <= 0) {

            $query = "UPDATE dms SET com_code=NULL WHERE com_code='{$passkey}'";

            $result = mysqli_query($connection, $query);
                if (mysqli_affected_rows ($connection) <= 0) {

                    $query = "UPDATE users SET com_code=NULL WHERE com_code='{$passkey}'";

                    $result = mysqli_query($connection, $query);
                        if (mysqli_affected_rows ($connection) <= 0) {
                            echo '<div> ERROR MESSAGE<br><br>Sorry, something went wrong!<br><br>Please contact the site admin at <a href="mailto:support@domain.com">support@domain.com</a> for assistance.</div>';
                        } else {
                            echo '<div>Your account is now active. You may now <a href="login.php">Log in</a></div>';
                        }
                } else {
                    echo '<div>Your account is now active. You may now <a href="login.php">Log in</a></div>';
                }
        } else {
            echo '<div>Your account is now active. You may now <a href="login.php">Log in</a></div>';
        }

    mysqli_close($connection);
?>

它可以工作,但是看起來很慢。 任何改進的建議將不勝感激。

嘗試在1個查詢中完成所有操作,而不是執行UNION ALL

UPDATE 
 pims,dms,users
SET
 pims.com_code=NULL, dms.com_code=NULL, users.com_code=NULL
WHERE 
 pims.com_code='$passkey'
AND
 dms.com_code='$passkey'
AND
 users.com_code='$passkey'

SQL例如撥弄- http://sqlfiddle.com/#!2/d0464d/1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM