Si su aplicación solo está calculando md5 cuando alguien se registra en su sitio, o inicia sesión, ¿tendrá muchas llamadas por md5 por hora? ¿Par de cientos? Si es así, no creo que la diferencia realmente pequeña sea significativa entre PHP y MySQL.
La pregunta debería ser más como "¿dónde pongo el hecho de que la contraseña se almacena utilizando md5" que "lo que me hace ganar casi nada".
Y, como nota al margen, otra pregunta podría ser: ¿dónde puede permitirse gastar recursos para ese tipo de cálculos? Si usted tiene 10 servidores PHP y un servidor de base de datos ya bajo carga pesada, que obtener su respuesta ;-)
Pero, sólo por diversión:
mysql> select benchmark(1000000, md5('test'));
+---------------------------------+
| benchmark(1000000, md5('test')) |
+---------------------------------+
| 0 |
+---------------------------------+
1 row in set (2.24 sec)
Y en PHP:
$before = microtime(true);
for ($i=0 ; $i<1000000 ; $i++) {
$a = md5('test');
}
$after = microtime(true);
echo ($after-$before) . "\n";
da:
$ php ~/developpement/tests/temp/temp.php
3.3341760635376
Pero probablemente no estés calculando un millón de md5 como este, ¿o sí?
(Y esto no tiene nada que ver con la prevención de las inyecciones SQL: acaba de escapar/presupuesto sus datos siempre o usar comandos preparados!)
Cuando todo lo demás falla, realice un experimento. – Rafe
por lo que ahorrará aproximadamente un microsegundo haciéndolo en la base de datos en lugar de hacerlo en php. suena bastante insignificante, pero es interesante saber – Kip
+1 para una respuesta muy completa y un punto importante acerca de las inyecciones de SQL :) – Draemon