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