Nếu ứng dụng của bạn chỉ làm mờ md5 khi ai đó đăng ký trên trang web của bạn hoặc đang đăng nhập, bạn có thể thực hiện nhiều cuộc gọi đến md5 mỗi giờ? Vài trăm người? Nếu vậy, tôi không nghĩ rằng thực sự nhỏ sự khác biệt giữa PHP và MySQL sẽ là đáng kể ở tất cả.
Câu hỏi phải giống như "nơi tôi đặt thực tế là mật khẩu được lưu trữ bằng md5" hơn "điều khiến tôi giành được hầu như không có gì".
Và, như một phụ trang, một câu hỏi khác có thể là: nơi bạn có thể đủ khả năng chi tiêu tài nguyên cho loại tính toán đó? Nếu bạn có 10 máy chủ PHP và một DB máy chủ đã theo tải trọng nặng, bạn sẽ có được câu trả lời của bạn ;-)
Nhưng, chỉ để cho vui:
mysql> select benchmark(1000000, md5('test'));
+---------------------------------+
| benchmark(1000000, md5('test')) |
+---------------------------------+
| 0 |
+---------------------------------+
1 row in set (2.24 sec)
Và trong PHP:
$before = microtime(true);
for ($i=0 ; $i<1000000 ; $i++) {
$a = md5('test');
}
$after = microtime(true);
echo ($after-$before) . "\n";
cung cấp:
$ php ~/developpement/tests/temp/temp.php
3.3341760635376
Nhưng có thể bạn sẽ không tính toán triệu triệu md5 như thế này, đúng không?
(Và điều này không có gì để làm với việc ngăn ngừa tiêm SQL: chỉ cần thoát khỏi/quote dữ liệu của bạn luôn luôn hoặc sử dụng chuẩn bị phát biểu!)
Nguồn
2009-07-26 13:23:29
Khi mọi thứ khác không thành công, hãy tiến hành thử nghiệm. – Rafe
vì vậy bạn sẽ tiết kiệm khoảng một micro giây làm việc đó trong cơ sở dữ liệu như trái ngược với thực hiện nó trong php. âm thanh khá không đáng kể, nhưng thú vị để biết dù sao – Kip
+1 cho một câu trả lời rất kỹ lưỡng và điểm quan trọng về tiêm SQL :) – Draemon