सबसे पहले और सबसे महत्वपूर्ण, आपको बिल्कुल अपने एसक्यूएल तारों में सीधे चर को अलग नहीं करना चाहिए। इससे एसक्यूएल इंजेक्शन हमलों की संभावना खुलती है। यहां तक कि यदि वे चर उपयोगकर्ता इनपुट से नहीं आते हैं, तो यह खतरनाक बग की संभावना को खोल देता है जो आपके डेटा को खराब कर सकता है।
MySQL डीबीडी ड्राइवर एकाधिक कथन का समर्थन करता है, हालांकि यह डिफ़ॉल्ट रूप से सुरक्षा सुविधा के रूप में बंद हो जाता है। डीबीडी :: mysql दस्तावेज़ में Class Methods अनुभाग के तहत mysql_multi_statements
देखें।
लेकिन एक बेहतर समाधान, जो दोनों समस्याओं को एक साथ हल करता है और अधिक पोर्टेबल है, तैयार कथन और प्लेसहोल्डर मूल्यों का उपयोग करना है।
while($whatever) {
my ($EC, $MR, $EM) = get_the_data();
$sth->execute($EC, $MR, $EM);
}
आप केवल एक बार बयान तैयार करने की आवश्यकता है, और प्लेसहोल्डर मान बदल दिया जाता है (और ठीक से उद्धृत किए जाने की गारंटी) द्वारा:
my $sth = $dbh->prepare("UPDATE LOW_PRIORITY TableName SET E1=?,F1=? WHERE X=?");
फिर, किसी प्रकार की एक पाश में अपना डेटा प्राप्त डीबीडी चालक।
DBI docs में प्लेसहोल्डर के बारे में और पढ़ें।
, वहाँ एक में दो अपडेट गठबंधन नहीं करने के लिए कोई कारण नहीं है; क्या आप उदाहरणों की तरह एक उदाहरण दे सकते हैं जो आपको वास्तव में करने की ज़रूरत है? – ysth