Se l'applicazione sta calcolando md5 solo quando qualcuno si registra sul tuo sito, o sta effettuando l'accesso, molte chiamate a md5 verranno effettuate all'ora? Un paio di centinaia? Se è così, non credo che la differenza molto piccola tra tra PHP e MySQL sarà significativa a tutti.
La domanda dovrebbe essere più simile a "dove metto il fatto che la password viene memorizzata utilizzando md5" rispetto a "ciò che mi fa vincere quasi nulla".
E, come nota a margine, un'altra domanda potrebbe essere: dove puoi permetterti di spendere risorse per quel tipo di calcoli? Se si dispone di 10 server PHP e un server di DB già sotto carico pesante, si ottiene la risposta ;-)
Ma, solo per divertimento:
mysql> select benchmark(1000000, md5('test'));
+---------------------------------+
| benchmark(1000000, md5('test')) |
+---------------------------------+
| 0 |
+---------------------------------+
1 row in set (2.24 sec)
E in PHP:
$before = microtime(true);
for ($i=0 ; $i<1000000 ; $i++) {
$a = md5('test');
}
$after = microtime(true);
echo ($after-$before) . "\n";
dà:
$ php ~/developpement/tests/temp/temp.php
3.3341760635376
Ma probabilmente non calcolerete un milione di md5 come questo, vero?
(E questo non ha nulla a che fare con la prevenzione iniezioni SQL: basta fuggire/quote dei dati sempre o utilizzare le istruzioni preparate!!)
fonte
2009-07-26 13:23:29
Quando tutto il resto fallisce, conduci un esperimento. – Rafe
quindi risparmierai circa un microsecondo facendolo nel database invece di farlo in PHP. sembra piuttosto trascurabile, ma interessante sapere comunque – Kip
+1 per una risposta molto approfondita e un punto importante sulle iniezioni SQL :) – Draemon