2010-02-23 11 views
5

मैं mysql में एक टेबल है:mysql_query लौटने पर तालिका में बनाए गए डेटा प्रकार को सुरक्षित रखता है?

$result = mysql_query("SELECT id,name FROM user"); 

मैं परिणाम इकट्ठा:

while($row = mysql_fetch_assoc($result) $rv[] = $row; 

और मैं डेटा वापस:

echo json_encode($rv); 

CREATE TABLE user (id INT, name VARCHAR(250)); 

मैं तालिका क्वेरी

समस्या यह है कि आईडी json_encode से पहले भी स्ट्रिंग के रूप में नहीं आती है और int नहीं। अगर मैं $ पंक्ति ['id'] = (int) $ पंक्ति ['id'] को मजबूर करता हूं; - यह बढ़िया काम करता है।

मैं mysql को $ पंक्ति में सही डेटा प्रकार वापस करने के लिए कैसे मजबूर कर सकता हूं?

10x।

उत्तर

2

PDO->bindColumn इस

$stmt = $dbh->prepare($sql); 

$stmt->bindColumn('int_col', $intVar, PDO::PARAM_INT); 
$stmt->bindColumn('string_col', $strVar, PDO::PARAM_STR); 

$stmt->execute(); 

$stmt->fetch(PDO::FETCH_BOUND); 

$ intVar स्वचालित रूप से कर सकते हैं, दुर्भाग्य से

+0

पहला धन्यवाद, लेकिन जब मुझे यह फ़ील्ड SQL तालिका में INT के रूप में घोषित किया जाता है तो मुझे डेटा प्रकार "कहने" की आवश्यकता क्यों है ... – aviv

+0

अच्छी तरह से, क्योंकि डीबी इंटरफ़ेस इसका समर्थन नहीं करता है। आप डीबी से प्राप्त करते हैं तारों की एक सरणी है।आप इन स्तरों में से कुछ को एप्लिकेशन स्तर पर किसी और चीज़ में परिवर्तित कर सकते हैं, लेकिन यह पूरी तरह से उड़ाए गए ओआरएम परत के बिना "स्वचालित रूप से" नहीं होगा। – user187291

3

int करने के लिए परिवर्तित पीएचपी < = 5.2, MySQL कार्य/वर्गों (यानी mysql_*, mysqli_*, और PDO) आधारित होते हैं साथ libmysql पर - एक सी लाइब्रेरी जो MySQL सर्वर के साथ संचार के लिए समर्थन प्रदान करती है।

कि लाइब्रेरी का उपयोग हमेशा सूत्र, यहां तक ​​कि पूर्णांक के लिए और स्तंभों नाव कार्य - और कुछ भी नहीं है कि आप के बारे में कुछ नहीं कर सकता है: एकमात्र समाधान है कुछ "मानचित्रण परत" (एक ORM) की तरह है करने के लिए है कि " जानता है ", PHP पक्ष पर, प्रत्येक कॉलम टाइप करने वाला टाइप होना चाहिए, और हर बार कुछ डेटा डेटाबेस से प्राप्त होने पर रूपांतरण करेगा।

नोट: जिस तरह से आप डेटा डालने वाले तरीके से इस तथ्य के बारे में कुछ भी नहीं बदलते हैं कि डीबी से डेटा प्राप्त करते समय आपको तार मिलेंगे।


पीएचपी साथ > = 5.3 कार्यों को करता है एक MySQL सर्वर के साथ संवाद libmysql के बजाय mysqlnd (MySQL मूल निवासी चालक) का उपयोग कर सकते हैं - है, हालांकि यह संकलन समय पर कॉन्फ़िगर किया जाना है।

और कुछ परिस्थितियों में "मूल" डेटा-प्रकारों के साथ संवाद करने में सक्षम होने के कारण, माइस्क्लंड प्रदान करने वाली अच्छी चीजों में से एक है; इसके बारे में, इस लेख में कुछ दिलचस्प सूचनाएं होनी चाहिए: PHP: New network traffic, CPU and memory savings with mysqlnd


करने के लिए चीजों को कम करता है:

  • पीएचपी 5.2 के साथ, आप केवल डेटाबेस से तार मिलेगा; और आपको कुछ प्रकार-रूपांतरण करना होगा
  • PHP 5.3 के साथ, आपको कम से कम कुछ मामलों में देशी डेटाटाइप मिल सकते हैं।
+0

बहुत प्रबुद्ध। धन्यवाद ! – aviv

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