2011-02-16 11 views
17

डेटा MySQL से वापस आ जाता है, तो यह स्वचालित रूप से तारों के रूप में, MySQL डेटा प्रकार की परवाह किए बिना दिया जाता है।PHP में पूर्णांक के रूप में MySQL से पूर्णांक कैसे प्राप्त करें?

वहाँ किसी भी तरह से MySQL/PHP डेटा प्रकार (जैसे पूर्णांक) बनाए रखने के लिए यह बताने के लिए है, इसलिए यदि आप किसी पूर्णांक स्तंभ क्वेरी, आप एक पूर्णांक PHP में बजाय एक स्ट्रिंग के मिल सकता है?

+2

यह ध्यान देने योग्य बात यह है कि पीएचपी हो नहीं कर सकता ld पूर्णांकों (मेरे कंप्यूटर में 2,147,483,647) 'PHP_INT_MAX' से भी बड़ा। यह सुरक्षित रूप से एक हस्ताक्षरित आईएनटी स्टोर कर सकता है लेकिन एक हस्ताक्षरित आईएनटी या कुछ भी बड़ा नहीं है। –

उत्तर

15

वैसे आप Type casting कर PHP का उपयोग दिए गए डेटा के प्रकार परिवर्तित करने के लिए कर सकते हैं।

आप पूर्णांक में कनवर्ट करने के लिए int, intval पर एक नज़र डाल सकते हैं। तुम भी settype उपयोग कर सकते हैं:

settype($foo, "array"); 
settype($foo, "bool"); 
settype($foo, "boolean"); 
settype($foo, "float"); 
settype($foo, "int"); 
settype($foo, "integer"); 
settype($foo, "null"); 
settype($foo, "object"); 
settype($foo, "string"); 

एक और तरीका होगा:

$foo = (array)$foo; 
$foo = (b)$foo;  // from PHP 5.2.1 
$foo = (binary)$foo; // from PHP 5.2.1 
$foo = (bool)$foo; 
$foo = (boolean)$foo; 
$foo = (double)$foo; 
$foo = (float)$foo; 
$foo = (int)$foo; 
$foo = (integer)$foo; 
$foo = (object)$foo; 
$foo = (real)$foo; 
$foo = (string)$foo; 
+1

+1 वह बहुत अधिक प्रकार कास्टिंग विकल्पों को कवर करता है। :-) –

+0

यदि आपका पूर्णांक 'PHP_INT_MAX' से बड़ा है तो इसे कैप्ड किया जाएगा। उदाहरण के लिए, यदि आप एक 64-बिट पीएचपी चला रहे हैं, भले ही MySQL के 'पीएचपी को अहस्ताक्षरित bigint' की पूरी रेंज पाने के लिए कोई रास्ता नहीं है। – Pacerier

1

पीएचपी एक जोरदार टाइप किया भाषा नहीं है के रूप में, यह कुछ हद तक व्यर्थ है, लेकिन आप निश्चित रूप से बस में क्षेत्र डाली सकता है उपयोग से पहले settype, आदि के माध्यम से एक int के लिए सवाल।

लिहाज किए बिना, कोई तरीका नहीं होता इस "प्रकार" जानकारी बनाए रखने के लिए है (है कि मैं के बारे में पता)।

+1

अर्थ के लिए खोज में, मैं टाइपकास्टिंग के माध्यम से संभावित प्रदर्शन लाभ की कल्पना करने की कोशिश कर रहा हूं। मुझे लगता है कि int या float के रूप में संख्यात्मक मान होने से कम मेमोरी का उपयोग होता है, दूसरी तरफ मैन्युअल टाइपकास्टिंग प्रक्रिया संसाधनों का उपभोग करेगी और PHP कोड को थोड़ा सा भी मिटा देगा। तो, मैन्युअल टाइपकास्टिंग मुझे सतही माइक्रोप्टाइमाइजिंग की तरह लगता है, जबकि सही प्रकार में MySQL रिटर्न परिणाम होने पर, यदि संभव हो तो उचित लगेगा। – Schmoove

0

MySQL के लिए PHP के डिफ़ॉल्ट लाइब्रेरी इस तरह के किसी भी विकल्प नहीं है। प्रकार कास्टिंग (पूर्णांक) या intval, (नाव) आदि

0

php में की तरह का प्रयोग करें, तो आप उपयोग कर सकते हैं ([प्रकार]) यकीन है कि $ कुछ पूर्णांक, इस मदद एसक्यूएल इंजेक्शन अगर आप इसके बारे khow गया था बनाने के लिए।

पूर्व:

(int) $something; 
2

आप प्रकार कास्टिंग इस्तेमाल कर सकते हैं एक बार आप अपने MySQL डेटाबेस

$row['field'] = (int)$row['field']; 
8

से डेटा प्राप्त करने के बाद MySQLi में bind_result का उपयोग करें: यह सही प्रकार सेट करता है और NULL संभालती है।

+0

पीडीओ में भी यह क्षमता है। – awm

0

मैं नहीं जानता कि किस संदर्भ में आप इस सवाल पूछा था। चूंकि एक php वैरिएबल का डेटा प्रकार इस बात पर निर्भर करता है कि आपकी तालिका में कौन से डेटा कॉलम हैं। यदि स्तंभ में MySQL में डेटा प्रकार "int" है, तो आपको php में एक पूर्णांक मिलता है (स्ट्रिंग नहीं)।

लेकिन वैसे भी, आप MySQL से लौटाए गए मान के डेटा प्रकार को जानने के लिए या तो is_numeric(), is_int() या gettype() php फ़ंक्शंस का उपयोग कर सकते हैं। Is_numeric() के साथ समस्या यह है कि यह सत्य लौटाता है भले ही एक चर में एक संख्यात्मक स्ट्रिंग उदा। "2"। लेकिन gettype() "स्ट्रिंग" वापस आ जाएगा और is_int() हमेशा उल्लिखित उदाहरण में झूठी वापसी करेगा i.e. "2"।

बार जब आप एक दिए गए मान के डेटा प्रकार पता है कि तुम php चर बाँध इस तरह प्रकार कास्टिंग द्वारा उस प्रकार बनाए रखने के लिए कर सकते हैं:

// Suppose this is the returned value from mysql and 
// you do not know its data type. 
$foo = "2"; 

if (gettype($foo) == "string"){ 
    $foo = (string) $foo; 
} 

आप कौन-सा डेटा प्रकार चर है के लिए कई चेकों बना सकते हैं और फिर तदनुसार इसे कास्ट करें।

मुझे आशा है कि यह उत्तर सहायक होगा। सौभाग्य!:)

0

आप मूल्य के आधार पर मानों ordening प्राप्त करना चाहते हैं, तो आप स्तंभ से फ्लोट करने के लिए डेटा प्रकार बदल सकते हैं (उदा: मूल्य)

पूर्व:

टेबल इलिट्रोनिक्स

price  id 
---------------- 
55.90  1 
40.33  2 
10.60  3 
1596.90  4 
56.90  5 

पीएचपी:

$sql = $pdo->query("SELECT * FROM eletronics ORDER BY price DESC"); 

// परिणाम

1596.90  4 
56.90  5 
55.90  1 
40.33  2 
10.60  3 

// आदेश है // OBS कीमतों प्रति किया जा रहा है: आप डॉट्स साथ str_replace का उपयोग कर बदल सकते हैं ","() // परिणाम: 1596,90 - 56,90 - 55,90 - 40,33 - 10,60 आदि

3

आप उबंटू चला रहे हैं:

sudo apt-get remove php5-mysql 
sudo apt-get install php5-mysqlnd 
sudo service apache2 restart 
संबंधित मुद्दे