[英]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.