2011-09-16 20 views
5

मैं पुस्तकालय में एक पुस्तक के माध्यम से MySQL और PHP सीख रहा हूँ। मैंMySQL क्वेरी में अब() का उपयोग करते समय संभावित विलंब?

password=SHA(CONCAT('password', '--', registration_date)) 

को

password=SHA('password') 

से पासवर्ड भंडारण बदलकर पासवर्ड एनक्रिप्टिंग प्रणाली की सुरक्षा में सुधार किया गया था जहां registration_date टाइमस्टैम्प जब उपयोगकर्ता पंजीकृत है।

वर्तमान कोड दर्ज की उपयोगकर्ताओं के लिए है:

INSERT INTO users (first_name, last_name, email, password, registration_date) 
VALUES ('first_name', 'last_name', 'email', SHA(CONCAT('password', '--', NOW())), NOW()); 

मैं वहाँ में के बारे में दो अलग-अलग NOW() कार्यों में चिंता करने की आवश्यकता होगी? क्या उनके पास थोड़ा अलग समय होने की संभावना है? मैंने इसे दो प्रश्नों के साथ करने की कोशिश की और यह ठीक काम करने लग रहा था।

यदि कोई समस्या है, तो मैं इसे कैसे ठीक करूं?

+0

आप बेहतर, बहुत, बहुत, बहुत, बहुत यकीन है कि पंजीकरण_डेट फ़ील्ड कभी भी कभी, कभी भी कभी अपडेट नहीं हो सकता है। अन्यथा आप उपयोगकर्ताओं की अचानक कमी के साथ खुद को पा लेंगे। –

+0

@ लैरी - जो पासवर्ड फ़ील्ड पर भी लागू होगा। :) –

उत्तर

3

कोई समस्या नहीं है। manual से:

NOW() एक निरंतर समय उस समय जिस पर बयान निष्पादित करने के लिए शुरू किया इंगित करता है देता है। (एक संग्रहीत समारोह या ट्रिगर के भीतर, NOW() समय है, जिस पर समारोह या ट्रिगर बयान निष्पादित करने के लिए शुरू किया देता है।)

उदाहरण के द्वारा मैनुअल पता चलता है, एक बयान के भीतर NOW() के हर मूल्यांकन एक ही मान देता है , मूल्यांकन के बीच कितना समय बीत चुका है इस पर ध्यान दिए बिना।

0

एक सर्वर पर, आपको चिंता करने की ज़रूरत नहीं है। प्रलेखन से:

NOW() एक निरंतर समय उस समय जिस पर बयान निष्पादित करने के लिए शुरू किया इंगित करता है देता है।

(http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_now) तो मूल्य एक क्वेरी में परिवर्तन नहीं होगा।

हालांकि आपको कथन आधारित प्रतिकृति के लिए देखना चाहिए। यदि कोई मौका है कि आपका डेटाबेस इस तरह से दोहराया गया है (उदाहरण के लिए बैकअप, या एचए), तो दास के पास मास्टर की तुलना में NOW() भिन्न हो सकता है।

+0

एसबीआर के बारे में अच्छा बिंदु। मास्टर और गुलाम के पास वास्तव में अलग-अलग 'अब()' मान हो सकते हैं। लेकिन दास की एक पंक्ति में 'अब()' के मान समान होंगे _ पंक्ति में। (मुझे लगता है कि ओपी का क्या संबंध था, असफल हो सकता है।) यदि मास्टर और गुलाम 'अब() 'मानों के बीच अंतर एक समस्या है, तो पंक्ति आधारित प्रतिकृति उसको हल करती है। वैकल्पिक रूप से, कोई समस्या के आसपास काम करने के लिए शायद 'सेट टाइमस्टैम्प' (जो 'अब() 'के मान को प्रभावित करता है) के साथ गेम खेल सकता है। –

संबंधित मुद्दे