2010-04-27 9 views
62

2 डेटाबेस फ़ील्डपीडीओ :: पैराम के लिए पैराम दशमलव?

`decval` decimal(5,2) 
`intval` int(3) 

2 पीडीओ प्रश्नों कि उन्हें अपडेट होता है। जो int int अपडेट करता है ठीक है

$update_intval->bindParam(':intval', $intval, PDO::PARAM_INT); 

लेकिन मैं दशमलव फ़ील्ड को अपडेट नहीं कर सकता। मैं नीचे 3 तरीके की कोशिश की है, लेकिन कुछ भी

$update_decval->bindParam(':decval', $decval, PDO::PARAM_STR); 
$update_decval->bindParam(':decval', $decval, PDO::PARAM_INT); 
$update_decval->bindParam(':decval', $decval); 

यह समस्या डेटाबेस प्रकार decimal साथ है लगता है काम करता है? decimal के प्रकार के लिए PDO::PARAM है? यदि नहीं, तो मैं वर्कअराउंड के रूप में क्या उपयोग करूं?

+0

कृपया अपनी तैयारी – Galen

+0

पूछताछ पोस्ट करें http://stackoverflow.com/questions/1335081/what-is-the-best-way-to-bind-decimal-double-float-values-with-pdo के संभावित डुप्लिकेट -इन-पीएचपी –

उत्तर

61

decimals/floats के लिए कोई PDO::PARAM नहीं है, तो आपको PDO::PARAM_STR का उपयोग करना होगा।

+2

यह उन चीजों में से एक था जो मैंने कोशिश की थी और यहां प्रश्न पोस्ट करने से पहले काम नहीं किया था। – dmontain

+0

@ डोंटमेन: स्ट्रिंग के रूप में $ decval को परिभाषित करने का प्रयास करें (उदाहरण के लिए '' 1.0' 'के बजाय '' 1.0'') या' strval ($ decval) 'का उपयोग करें। –

+5

@ डोंटमेन: इसे बॉक्स से बाहर काम करना चाहिए ('पीडीओ :: PARAM_STR' डिफ़ॉल्ट है जब कोई निर्दिष्ट नहीं है), और ** आपको ** अपना कॉलम डेटा प्रकार नहीं बदलना चाहिए। केवल सिंगल या डबल कोट्स या 'स्ट्रवल()' के साथ मान को संलग्न करें, इस तरह: '$ update_decval-> बाइंडपाराम (': decval', strval ($ decval), पीडीओ :: PARAM_STR);'। –

0

मुझे पता चला कि पीडीओ का उपयोग करके डौलबीस को स्टोर करने का एक तरीका ढूंढ रहा है, कि यदि आप तीसरे तर्क (यानी पीडीओ :: PARAM_ *) प्रदान नहीं करते हैं तो यह किसी प्रकार का जादू उपयोग करता है और सही ढंग से नंबर स्टोर करता है। तो हो सकता है कि अगर आपने पीडीओ को पैरामीटर प्रकार के बारे में चिंता करने के लिए छोड़ दिया है और आसानी से बांधना है: $ decval से decval और अगले कार्य के साथ हॉप :-))

+7

यह किसी प्रकार का जादू नहीं है, लेकिन स्वीकृत उत्तर में पैरामीटर को स्ट्रिंग के रूप में इलाज करने के लिए डिफ़ॉल्ट है। – PeerBr

0

यूपी को पीडीओ :: PARAM_STR समान का उपयोग करना चाहिए, और यह नोट करना यदि डेटाबेस में कॉलम NUMERIC (एम, डी) या दशमलव (एम, डी) टाइप किया गया है, तो यह देखा जाना चाहिए कि एम वर्णों की सटीकता की संख्या है जो वर्ण दर्ज कर सकते हैं, और डी की संख्या दशमलव स्थान। उदाहरण में NUMERIC (10,2) हमारे पास सटीकता और दो दशमलव स्थानों के स्थान पर 8 घर हैं। तो हमारे पास कुल मिलाकर 10 वर्ण हैं जिनमें दशमलव स्थानों के लिए 2 आरक्षित हैं।

0

मैं एक समाधान नहीं मिला, एसक्यूएल सर्वर दुकान प्रक्रिया में, पीडीओ :: PARAM_STR तरह दशमलव पैरामीटर भेज दशमलव की तरह इसे प्राप्त (पूर्णांक, डीईसी)

पीएचपी

$stmt_e->bindParam(':valor_escala_desde', $valor_escala_desde, PDO::PARAM_STR); 

एसक्यूएल सर्वर, स्टोर प्रक्रिया:

@valor_escala_desde decimal(18,2), 

और किया जाता है।

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