![](/img/trans.png)
[英]Update column automatically based on value of another column (same table) in Laravel (7)
[英]How to Update a column in all rows of a table based on a function call with existing value in that same column
我的user_table中有一列称为密码。 现在,我想通过传递密码字段的现有值来更新所有行中的所有密码字段,并使用函数的返回值来更新它。 如何实现呢?
╔════╦══════════════╦══════╗
║ id ║ username ║ pwd ║
╠════╬══════════════╬══════╣
║ 1 ║ Jeff Atwood ║ 5636 ║
║ 2 ║ Geoff Dalgas ║ 148 ║
║ 3 ║ Jarrod Dixon ║ 101 ║
║ 4 ║ Joel Spolsky ║ 959 ║
╚════╩══════════════╩══════╝
我的功能如下:
function encryptPassword(password)
{
// $new password = my encryption logic here
return $password;
}
如何每行一次更新所有密码密码框?
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `ITERATEALLTABLE_PWD`()
BEGIN
DECLARE VAR_OLD_PASS varchar(100);
DECLARE VAR_NEW_PASS varchar(100);
DECLARE VAR_QRY varchar(100);
DECLARE VAR_FINISHED INT(11) DEFAULT 0;
DECLARE VAR_ID INT(11) ;
DECLARE DATABASE_CURSOR CURSOR FOR
SELECT pwd ,ID
FROM TABLENAME;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET VAR_FINISHED = 1;
OPEN DATABASE_CURSOR;
GET_NEXTRECORD: LOOP
FETCH DATABASE_CURSOR INTO VAR_OLD_PASS,VAR_ID;
IF VAR_FINISHED = 1 THEN
LEAVE GET_NEXTRECORD;
END IF;
SET VAR_NEW_PASS =CONCAT(VAR_OLD_PASS,'ABC'); <-------Here you have to implement your crypto operation!>
SET @VAR_QRY = CONCAT("UPDATE TABLENAME SET PWD=" , VAR_NEW_PASS , " WHERE ID = ",VAR_ID);
PREPARE stmt FROM @VAR_QRY;
EXECUTE stmt;
END LOOP GET_NEXTRECORD;
CLOSE DATABASE_CURSOR;
END
试试上面的代码;
并相应地更改新密码,在这里我刚刚在ABC
后面加上了OLD PASSWORD
。
希望能有所帮助。
您可以使用类似以下的查询:
" UPDATE `your_table` SET `pwd` = '$NEW_PASSWORD'
WHERE `pwd` =
(SELECT `pwd` FROM `table` WHERE `pwd`= '$OLD_PASSWORD')
";
那就是如果你想使用一个SQL查询
如果你想要PHP
$ Query =“ SELECT * FROM your_table
”;
假设您已经准备好sql db连接,并假设您通过get
命令获取数据
$Results = $DB->query($Query)->get();
// Loop through rows
foreach ($results as $result){
$ID = $result->id;
$NEW_PWD = ''; // your pwd logic here
$DB->query("UPDATE `your_table` SET `pwd` = '$NEW_PWD' WHERE `id` = '$ID'")->execute();
}
我再次假设您已经使用mysql_connect或PDO准备好数据库连接
其背后的逻辑很简单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.