Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

डीबग पीडीओ mySql खाली के बजाय डेटाबेस में NULL डालें

यह मुझे पीडीओ के तैयार स्टेटमेंट एमुलेशन में एक (एन अरिपोर्टेड?) बग प्रतीत होता है:

  1. कार्यान्वयन का PDOStatement::execute() आखिरकार आह्वान pdo_parse_params() ;

  2. कि, बदले में, मानों को कोट/एस्केप करने का प्रयास करता है प्रासंगिक पैरामीटर के डेटा प्रकार के आधार पर (जैसा कि $data_type . द्वारा दर्शाया गया है) PDOStatement::bindValue() के तर्क और PDOStatement::bindParam() —सभी पैरामीटर $input_parameters . के रूप में दिए गए हैं से PDOStatement::execute() PDO::PARAM_STR . के रूप में माना जाता है , जैसा कि उस फ़ंक्शन के दस्तावेज़ीकरण में बताया गया है);

  3. स्ट्रिंग-टाइप किए गए मान कॉलिंग<द्वारा एस्केप/उद्धृत किए जाते हैं /ए> प्रासंगिक डेटाबेस ड्राइवर का quoter() विधि चाहे वे null हों या नहीं :PDO_MySQL के मामले में, यह mysql_handle_quoter() , जो (अंततः) मान को mysqlnd_cset_escape_quotes() या mysql_cset_escape_slashes() , सर्वर के NO_BACKSLASH_ESCAPES के आधार पर एसक्यूएल मोड;

  4. एक null दिया गया है तर्क, वे दोनों कार्य एक खाली स्ट्रिंग लौटाते हैं।

मेरी राय है कि, पैरामीटर पर स्विच करने से पहले टाइप करें (उपरोक्त चरण 2 में), pdo_parse_params() टाइप को PDO::PARAM_NULL . पर सेट करना चाहिए यदि मान null है . हालांकि, कुछ लोग यह तर्क दे सकते हैं कि यह null . के प्रकार-विशिष्ट प्रबंधन को रोक देगा जहां उपयुक्त हो, उस स्थिति में स्ट्रिंग केस (उपरोक्त चरण 3 में) निश्चित रूप से null को संभालना चाहिए ड्राइवर के quoter() . पर कॉल के साथ आगे बढ़ने से पहले मान विधि।

एक अंतरिम समाधान के रूप में, तैयार कथन अनुकरण को अक्षम करना आमतौर पर वैसे भी सर्वोत्तम होता है:

$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या मुझे अपने MySQL डेटाबेस के लिए MyISAM या InnoDB टेबल्स का उपयोग करना चाहिए?

  2. 2 तिथियों के बीच खाली होने पर भी खाली पंक्तियाँ उत्पन्न करें

  3. एसक्यूएल में बाइनरी स्ट्रिंग्स पर हैमिंग दूरी

  4. मैं PHP के पीडीओ का उपयोग कर MySQL डेटाबेस में डेटा डालना चाहता हूं। लेकिन डेटा डाला नहीं गया है

  5. एक दूरस्थ MySQL डेटाबेस कनेक्शन की स्थापना