प्रश्नों का एक गुच्छा एक साथ न चलाएं। आमतौर पर एक की सफलता अन्य सभी ऑपरेशनों के सही ढंग से किए जाने पर निर्भर करती है, इसलिए आप केवल बुलडोजर नहीं चला सकते हैं जैसे कि कोई समस्या होने पर कुछ भी गलत नहीं हुआ हो।
आप इसे इस तरह कर सकते हैं:
$queries = [
"CREATE TEMPORARY TABLE tmp SELECT * FROM event_categoriesBU WHERE id = 1",
"UPDATE tmp SET id=100 WHERE id = 1",
"INSERT INTO event_categoriesBU SELECT * FROM tmp WHERE id = 100"
];
foreach ($query as $query) {
$stmt = $conn->prepare($query);
$stmt->execute();
}
अपवादों को सक्षम करना भूलना न भूलें ताकि कोई भी क्वेरी विफलता नियंत्रण से बाहर होने के बजाय आपकी प्रक्रिया को रोक दे।
कारण आप नहीं multi_query
. का उपयोग करें ऐसा इसलिए है क्योंकि वह फ़ंक्शन प्लेसहोल्डर मानों का समर्थन नहीं करता है। यदि आपको इस क्वेरी में किसी प्रकार का उपयोगकर्ता डेटा पेश करने की आवश्यकता है तो आपको bind_param
का उपयोग करने की आवश्यकता है इसे सुरक्षित रूप से करने के लिए। प्लेसहोल्डर मानों के बिना आप SQL इंजेक्शन बग के संपर्क में हैं, और उनमें से एक ही आपके पूरे एप्लिकेशन को असुरक्षित बनाने के लिए पर्याप्त है।
यह ध्यान देने योग्य है कि पीडीओ mysqli
. की तुलना में बहुत अधिक लचीला और अनुकूलनीय है इसलिए यदि आपने mysqli
. में बहुत अधिक निवेश नहीं किया है , यह एक स्विच पर विचार करने योग्य है।