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

Foreach लूप में PDO और MySQL अद्यतन

शुरुआत के लिए आप bindParam() . का उपयोग कर रहे हैं जैसे यह bindValue() है , वे काफी अलग हैं ।

यह देखे बिना कि आप अपने सरणी मान कहां से प्राप्त कर रहे हैं, यह देखना थोड़ा कठिन है कि निश्चितता के साथ क्या हो रहा है। ऐसा लगता है कि आप जो जानकारी प्रदान कर रहे हैं वह वास्तव में वह कोड नहीं है जिसका आप उपयोग कर रहे हैं और संशोधित किया गया है, विशेष रूप से फ़ोरैच लूप और डेटा_एरे चर के संबंध में, जैसा कि आप वर्णन कर रहे हैं, बिंदपाराम के साथ एक आम समस्या है, इसलिए यह धारणा है I पर काम कर रहा होगा। यदि ऐसा है, तो सामान्य रूप से वास्तविक कोड स्निपेट प्रदान करना एक अच्छा विचार है, जिसमें उपयोग किए गए चर के आरंभीकरण और उन ब्लॉकों के कोड के बजाय जहां समस्या पाई जाती है, ब्लॉक शामिल हैं।

यहाँ एक और जवाब है क्यों के साथ , मूल रूप से सुनिश्चित करें कि आप अपने फ़ोरैच लूप के मूल्य भाग के संदर्भ में गुजर रहे हैं या आप बाइंडपरम्स को बाइंडवैल्यू में बदल रहे हैं। यदि आप इस संरचना का उपयोग जारी रखने की योजना बना रहे हैं, क्योंकि आप दोनों bindParam() चला रहे हैं, तो आप यह भी सुनिश्चित करना चाहेंगे कि आप यहां एक के बजाय दो अलग-अलग ऑब्जेक्ट का उपयोग कर रहे हैं हर बार जब आप execute() . कॉल करते हैं तो विधियां ।

तो कुछ ऐसा कहें, क्या कोड संरचना नहीं बदली गई थी (जो शायद यह होनी चाहिए क्योंकि यह सब लूप में है और केवल एक्ज़िक्यूट लूप में होना चाहिए):

$set_data1 = "UPDATE data_table
          SET data_status = 'PROCESSED' 
          WHERE data_id = :data_id1";

$stmt = $db->prepare($set_data1);

$stmt->bindValue(':data_id1', $data_array1['data_id'], PDO::PARAM_INT);

$stmt->execute();

$set_data2 = "UPDATE data_table
              SET data_status = 'PENDING'
              WHERE data_id = :data_id2";

$stmt2 = $db->prepare($set_data2);

$stmt2->bindValue(':data_id2', $data_array2['data_id'], PDO::PARAM_INT);

$stmt2->execute();

हालांकि ऐसा करने का एक अधिक इष्टतम तरीका कुछ ऐसा होगा (ध्यान रखें कि यह केवल एक सामान्य उदाहरण है):

$set_data = "UPDATE data_table
          SET data_status = :data_status 
          WHERE data_id = :data_id";

$data_array = array( array('data_status' => $dataStatus1, 'data_id' => $dataId), array('data_status' => $dataStatus2, 'data_id' => $dataId2) ); 
/* this is just to represent a multidimensional array (or a multidimensional object) containing the data status and the data id which should be handled and decided before you pass them into a loop. */

$stmt = $db->prepare($set_data);

$data_status = null;
$data_id = null;

$stmt->bindParam(':data_status', $data_status);
$stmt->bindParam(':data_id', $data_id);

foreach( $data_array as $name => $val ) {
    $data_status = $val['data_status'];
    $data_id = $val['data_id'];
    $stmt->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 के लिए Percona सर्वर कैसे परिनियोजित करें

  2. लिफ्ट और MySQL कैसे कनेक्ट करें?

  3. Magento:बैकअप सलाह

  4. विभिन्न क्षेत्रों के साथ कई तालिकाओं पर MySQL पूर्ण पाठ खोज

  5. MySQL में दिनांक को मिलीसेकंड में बदलें