繁体   English   中英

如何基于函数调用更新表的所有行中的列,而该函数具有同一列中的现有值

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM