Php 如何使用同一列中的现有值基于函数调用更新表所有行中的列

Php 如何使用同一列中的现有值基于函数调用更新表所有行中的列,php,mysql,Php,Mysql,我的user_表中有一列名为password。 现在我想通过传递password字段的现有值来更新所有行中的所有password字段,并使用函数的返回值来更新它。如何实现 ╔════╦══════════════╦══════╗ ║ id ║ username ║ pwd ║ ╠════╬══════════════╬══════╣ ║ 1 ║ Jeff Atwood ║ 5636 ║ ║ 2 ║ Geoff Dalgas ║ 148 ║ ║ 3 ║ Jarrod Dixon

我的user_表中有一列名为password。 现在我想通过传递password字段的现有值来更新所有行中的所有password字段,并使用函数的返回值来更新它。如何实现

╔════╦══════════════╦══════╗
║ 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
CREATE DEFINER=`root`@`localhost`过程`ITERATEALLTABLE\u PWD`() 开始 声明VAR_OLD_PASS varchar(100); 声明VAR_NEW_PASS varchar(100); 声明VAR_QRY varchar(100); 声明VAR_FINISHED INT(11)默认为0; 声明VAR_ID INT(11); 声明的数据库\u游标 选择pwd,ID 从表名开始; 未找到集合VAR_FINISHED=1的声明继续处理程序; 开放数据库; 获取下一条记录:循环 将数据库游标提取到VAR\u OLD\u PASS中,VAR\u ID; 如果VAR_FINISHED=1,则 留下下一条记录; 如果结束; 设置VAR_NEW_PASS=CONCAT(VAR_OLD_PASS,'ABC'); SET@VAR_QRY=CONCAT(“更新TABLENAME SET PWD=,VAR_NEW_PASS,”,其中ID=,VAR_ID); 从@VAR_QRY准备stmt; 执行stmt; 结束循环获取下一条记录; 关闭数据库; 结束
试试上面的代码

并对新密码进行相应的更改,这里我刚刚用
旧密码添加了
ABC


希望有此帮助。

您可以使用以下查询:

" UPDATE `your_table` SET `pwd` = '$NEW_PASSWORD' 
    WHERE `pwd` = 
        (SELECT `pwd` FROM `table` WHERE `pwd`= '$OLD_PASSWORD')
";
如果您想使用sql查询,就需要这样做


如果你想要php

$Query=“从您的_表中选择*”

假设您已经准备好了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\u connect或


它背后的逻辑很简单。

使用循环和简单的更新查询可以实现it@AhmedGinani我知道,但是有没有办法通过调用函数来更新它,并在MySQL更新查询中获取返回值?不是在一个查询中,不是。将所有行选择到一个PHP数组中,循环,针对密码运行encryptPassword函数,然后更新该行。如果您需要特定于PHP的功能,那么没有其他方法可以做到这一点。MySQL确实有一些内置函数来加密字段,根据您的需求,这些函数可能不再需要PHP@ADyson谢谢,我需要PHP,无论如何,我会按照你建议的方法在这里更新:)如果加密可以完全在MySQL中完成,这将很好,但OP说他们有一个PHP方法,他们需要使用它来更改每个密码。不幸的是,这种方法是行不通的。但是他们也可以选择使用
MySQL