我想做一個查詢來更新和選擇列,比如
UPDATE dbo.employees SET otp = $OTP
WHERE identification = $identity (SELECT mail,emp.id, emp.name FROM dbo.emails email
LEFT JOIN dbo.employees emp ON emp.id = email.employee
WHERE emp.identification = $identity)
如何獲取選定的列值
uj5u.com熱心網友回復:
如前所述,您可以使用該OUTPUT子句來實作這一點。
您的代碼還有幾個問題:
- 您必須引數化您的陳述句,否則您將面臨危險的 SQL 注入。
- 如果您只期望一行,則不需要回圈結果。
- A
LEFT JOIN后跟WHERE在連接表的一個列上使其成為隱式INNER JOIN.
$OTP = generateOTP();
$sql = "
UPDATE emp
SET otp = @OTP
OUTPUT email.mail, inserted.name
FROM dbo.employees emp
INNER JOIN dbo.emails email ON emp.id = email.employee
WHERE emp.identification = @identity;
";
$stmt = $con->prepare($sql);
$stmt->bindParam('@identity', $identity);
$stmt->bindParam('@OTP', $OTP);
if($stmt->execute()) {
$row = stsmt->fetch();
$emailTo = $row['mail'];
$name = $row['name'];
} else {
// deal with errors
}
此代碼僅適用emails于與employees. 否則,您必須使用單獨的SELECT.
uj5u.com熱心網友回復:
你可以使用存盤程序
create procedure spupdate_employees_mail
@OTP int,
@IDENT varchar(20)
AS BEGIN
UPDATE employees SET OTP=@OTP WHERE identification=@IDENT
SELECT mail,employees.id,employees.name from emails
LEFT JOIN employees ON employees.id=emails.id
WHERE employees.identification=@IDENT
END
EXECUTE spupdate_employees_mail 1001,'mechanic'
spupdate_employees_mail 帶有兩個引數(otp 為 int,標識為 varchar)。它將更新表-employess,然后在 LEFT JOIN 上從employees 和 emalis 表中獲取資料
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/418528.html
標籤:
上一篇:分組后按列內容分類計數
下一篇:從日期范圍插入多行
