2017-06-08 5 views
-1

user_tableに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; 
} 

は、どのように私は1つですべての行1内のすべてのパスワードcloumnを更新することができますか?

+0

ループと単純な更新クエリを使用して達成することができます –

+0

@AhmedGinani私はそれを知っていますが、私は関数を呼び出してそれを更新し、MySQLの更新クエリで戻り値を取る方法はありますか? –

+1

は1つのクエリではありません。 PHP配列のすべての行を選択し、ループスルーし、パスワードに対してencryptPassword関数を実行し、その行を更新します。 PHP固有の機能が必要な場合は、これを行う他の方法はありません。 MySQLにはフィールドを暗号化するための組み込み関数がいくつか用意されていますが、これは必要に応じてPHPの必要性を排除します。 https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html – ADyson

答えて

1
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 

上記のコードを試してください。

それに応じて新しいパスワードを変更します。ここではABCOLD PASSWORDを追加しました。

このヘルプが必要です。

+1

これは暗号化がMySQLで完全に行えるのであれば問題ありませんが、OPはそれぞれのパスワードを変更するためにPHPのメソッドが必要だと言っています。だから、このアプローチは残念ながら働くことはできません。 – ADyson

+0

オハイオ州は正しいです。しかし、彼らは代わりに 'MySQL'を進めるかもしれません。 –

1

あなたはのようなクエリを使用することができます:あなたは、PHP

$クエリ=「your_table * FROMを選択したい場合は、SQLクエリ


を使用する場合です

" UPDATE `your_table` SET `pwd` = '$NEW_PASSWORD' 
    WHERE `pwd` = 
     (SELECT `pwd` FROM `table` WHERE `pwd`= '$OLD_PASSWORD') 
"; 

を";

$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

をあなたのDB接続を持っていると仮定していますあなたはすでに準備SQLデータベースの接続を持っていると仮定すると、あなたはgetコマンドを介してデータを取得すると仮定し

その背後にある論理は簡単です。

関連する問題