[mysql] md5 hash toepassen op velden

Pagina: 1
Acties:

  • Dwightjo
  • Registratie: Juni 2003
  • Laatst online: 06-03 15:33
Ik ben bezig om 2 user databases samen te voegen tot 1 grote database, echter liep ik tegen wat probleempjes aan.

De structuur van de oude databases was nogal verschillend, en beide worden nog steeds voor verschillende doeleinde gebruikt. Maar omdat 2 sites samen komen, en er gebruik gemaakt zal worden van beide diensten zou het wel handig zijn als er nog maar slechts 1 userdatabase zou zijn.

Inmiddels ben ik zover dat de structuur is opgezet, de gezamelijke kenmerken in 1 kolom komen etc etc.

Omdat het voor mij alweer een tijd terug was dat ik echt met php en mysql bezig was. was het wel even zoeken.

door middel van
code:
1
2
3
INSERT INTO `newuserdb` ( `us_id` , `us_password` , `us_name` , `us_email`, `ID`)
SELECT `e_mail` , `password` , `nickname` , `email`, `ID`
FROM `olduserdb`


kon ik de benodigde velden van de één over halen naar het ander.
Maar dan nu mijn probleem. in de oude tabel zijn de wachtwoorden in plain text opgeslagen.
dit wil ik wijzigen naar md5 hashes (andere database gebruikt dit ook)

nou lukt het mij niet om alle password velden in één keer om te zetten naar md5 hashes.
binnen mysql gebruik ik:

code:
1
UPDATE olduserdb SET password = MD5('het oude wachtwoord') WHERE ID = 'nummer';


Nu moet ik dus zelf eerst het oude wachtwoord typen, en het ID nummer opgeven dat bij dat wachtwoord hoord.

nou kan ik dit dus 1 voor 1, doen en als het niet om ongeveer 12000 records ging, dan had ik dat ook gedaan. Maar dat kan dus sneller (neem ik aan)

heb al wat verschillende constructies geprobeerd maar krijg telkens syntax error
Of moet ik hiervoor ook php gebruiken. (want nu voer ik rechstreekt queries uit op de dbase)

advies is welkom

Illest Alive


  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 09-05 10:16

ripexx

bibs

Waarom zou de volgende query niet werken:
SQL:
1
UPDATE olduserdb SET password = MD5(password);

buit is binnen sukkel


Verwijderd

Gewoon iets doen als (in pseudocode)

- SELECT oldpasswd,userid FROM oude_tabel
- deze gegevens in een for-lus doorlopen
- in de for lus
* newpassword= crypt (oldpassword)
* UPDATE oude_tabel SET oldpwasswd='newpassword' where userid='userid'
- klaar

En als MySQL dat ondersteund (weet ik niet) vlak voor de for lus een transactie beginnen, en die transactie na de for-lus committen.
Gaat over het algemeen sneller, en je weet zeker dat als er iets mis gaat met het updaten niets geupdate is. (Zodat niet je halve tabel wel met nieuwe wachtwoorden zit, en de andere helft zonder).

  • Dwightjo
  • Registratie: Juni 2003
  • Laatst online: 06-03 15:33
Ik ga beide opties nu even proberen

Bovenste optie werkt in iedergeval niet dan krijg ik volgende error
Unknown column 'password' in 'field list'

[ Voor 64% gewijzigd door Dwightjo op 31-03-2005 15:19 ]

Illest Alive


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 05:42
Begrijp ik het verkeerd, of wil je gewoon zoiets:
SQL:
1
2
INSERT INTO `newuserdb` (`us_id`, `us_password`, `us_name`, `us_email`, `ID`)
SELECT `e_mail` , MD5(`password`), `nickname` , `email`, `ID` FROM `olduserdb`

  • Dwightjo
  • Registratie: Juni 2003
  • Laatst online: 06-03 15:33
Soultaker schreef op donderdag 31 maart 2005 @ 15:19:
Begrijp ik het verkeerd, of wil je gewoon zoiets:
SQL:
1
2
INSERT INTO `newuserdb` (`us_id`, `us_password`, `us_name`, `us_email`, `ID`)
SELECT `e_mail` , MD5(`password`), `nickname` , `email`, `ID` FROM `olduserdb`
|:( ik geloof dat, dat het gene is wat ik zoek, en voel me best wel stupid nu
hihihi, ik ga het even proberen weer

Edit:
Dat was inderdaad wat ik zocht Soultaker bedankt
nu kan ik weer verder

[ Voor 9% gewijzigd door Dwightjo op 31-03-2005 15:24 ]

Illest Alive


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Als je een update op dezelfde tabel wil uitvoeren moet je een alias gebruiken. UPDATE tbla a, tbla b SET a.bla = b.bla WHERE a.id = b.id
Pagina: 1