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

मैसकल/पीडीओ वफ़ादारी उल्लंघन डुप्लिकेट प्राथमिक - हालांकि पहले से ही तालिका में कुछ भी नहीं है

खुशी है कि आपने इसका समाधान किया। हालांकि, यह कारण . को संबोधित करने के लिए है क्यों bindParam() आपके लिए काम नहीं किया। यह कोई बग नहीं है, यह डिजाइन द्वारा इस तरह से काम करता है।

दस्तावेज़ों के अनुसार :

(जोर मेरा)

उपरोक्त को ध्यान में रखते हुए, यह:

 87                         foreach($rowdata as $rowname => $rowvalue)
 88                         {
 89                                 $stmt->bindParam(':'.$rowname, $rowvalue);
 90                         }

...हर पैरामीटर को $rowvalue . से बाइंड कर देगा संदर्भ द्वारा जो, क्वेरी निष्पादन के समय, हमेशा 1 . होगा ($rowdata . का अंतिम तत्व )

bindParam() . का उपयोग करके इसे काम करने का तरीका कुछ ऐसा होगा:

 87                         foreach($rowdata as $rowname => $rowvalue)
 88                         {
 89                                 $stmt->bindParam(':'.$rowname, $rowdata[$rowname]);
 90                         }

...या, शायद, यहां तक ​​कि:

 87                         foreach($rowdata as $rowname => &$rowvalue)
 88                         {
 89                                 $stmt->bindParam(':'.$rowname, $rowvalue);
 90                         }

...ताकि प्रत्येक पैरामीटर संबंधित सरणी तत्व . को संदर्भित करे .

एक विकल्प, जैसा कि ऊपर बताया गया है, bindValue() होगा जो पैरामीटर को मान के आधार पर बांधता है संदर्भ के बजाय। इसका मतलब है कि पैरामीटर का मूल्यांकन उस समय किया जाएगा bindValue() कहा जाता है और उस समय नहीं जब वास्तव में इसकी आवश्यकता होती है (अर्थात क्वेरी निष्पादन):

 87                         foreach($rowdata as $rowname => $rowvalue)
 88                         {
 89                                 $stmt->bindValue(':'.$rowname, $rowvalue);
 90                         }

बेशक, दूसरा विकल्प खिला रहा है execute() मापदंडों की एक सरणी के साथ, जो execute() . देता है बाध्यकारी भाग को हल करें (इस प्रकार मेरा व्यक्तिगत पसंदीदा!)



  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 क्लाइंट को अपग्रेड करने पर विचार करें

  2. परिणामों के मर्ज किए गए सेट को वापस करने के लिए SQL

  3. MySQL:GROUP BY पर गैर-एकत्रित फ़ील्ड का क्या होता है?

  4. PHP, MySQL, प्रश्न चुनें

  5. एडब्ल्यूएस आरडीएस पर mysql सर्वर से कनेक्ट नहीं हो सकता