php - ज़ेन फ्रेमवर्क 1.5 में "INSERT... डिप्लीकेट कुंजी अपडेट" करने का कोई तरीका है?




mysql zend-framework (4)

@ बिल करविन: महान समाधान! लेकिन सवाल संकेतों के बजाय नामित प्लेसहोल्डर्स (": आईडी", ": col1", ...) का उपयोग करना अधिक होगा। Array_marge द्वारा आपको मानों को डुप्लिकेट करने की आवश्यकता नहीं होगी। इसके अलावा यदि "VALUES" के बजाय "INSERT" के "SET" वाक्यविन्यास का उपयोग करना है, तो कोड किसी भी फ़ील्ड के लिए स्वचालित रूप से जेनरेट होने के लिए सरल हो जाता है।

$sql = 'INSERT INTO sometable SET id = :id, col2 = :col2, col3 = :col3
    ON DUPLICATE KEY UPDATE id = :id, col2 = :col2, col3 = :col3';

मैं ज़ेंड फ्रेमवर्क 1.5 में ON DUPLICATE KEY UPDATE का उपयोग करना चाहता हूं, क्या यह संभव है?

उदाहरण

INSERT INTO sometable (...)
VALUES (...)
ON DUPLICATE KEY UPDATE ...

आप बस ऐसा कुछ कर सकते हैं:

अपनी आईडी पर अद्वितीय इंडेक्स सेट करें

और फिर

try {
   do insert here
} catch (Exception $e) {
   do update here
}

मैंने ज़ेंड के लिए काम किया और विशेष रूप से ज़ेंड_Db पर काफी काम किया।

नहीं, ON DUPLICATE KEY UPDATE वाक्यविन्यास के लिए कोई एपीआई समर्थन नहीं है। इस मामले के लिए, आपको केवल query() उपयोग करना होगा और स्वयं को पूरा SQL कथन बना देना होगा।

मैं एसक्यूएल में हारवेज शो के रूप में इंटरपोलिंग मानों की अनुशंसा नहीं करता हूं। क्वेरी पैरामीटर का प्रयोग करें।

संपादित करें: आप VALUES() अभिव्यक्तियों का उपयोग करके पैरामीटर को दोहराने से बच सकते हैं।

$sql = "INSERT INTO sometable (id, col2, col3) VALUES (:id, :col2, :col3)
  ON DUPLICATE KEY UPDATE col2 = VALUES(col2), col3 = VALUES(col3)";

$values = array("id"=>1, "col2"=>327, "col3"=>"active");

साइडबार के रूप में, आप ON DUPLICATE KEY UPDATE क्लॉज को सरल बना सकते हैं और VALUES() का उपयोग करके अपनी स्क्रिप्ट को प्रोसेस करने की आवश्यकता को कम कर सकते हैं:

$sql = 'INSERT INTO ... ON DUPLICATE KEY UPDATE id = VALUES(id), col2 = VALUES(col2), col3 = VALUES(col3)';

अधिक जानकारी के लिए http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html देखें।





insert-update