MySQL Prepared Statements

Introduction to MySQL Prepared Statements

एक prepared statement ऐसे SQL statement को define करने के लिए यूज़ किया जाता है जिसे बाद में execute किया जा सकता है। Prepared statements ऐसी situations में useful होते है जब आप बहुत सी ऐसी queries execute करना चाहते है जिनमें सिर्फ थोड़ा सा ही difference हो।

उदाहरण के लिए आप एक statement prepare कर सकते है जिसे बाद में कई बार अलग अलग values के साथ execute कर सकते है।

एक prepared statement सिर्फ एक ही बार parse किया जाता है। एक बार parse होने के बाद इसे कितनी भी बार execute किया जा सकता है। इसी वजह से prepared statements की performance normal queries से improved होती है क्योंकि इन्हें बार बार parse करने में time waste नहीं होता है।

जब भी prepared statement execute होता है तो बहुत कम changes के साथ client और server के बीच interaction होता है इससे MySQL server पर load भी कम हो जाता है।

Prepared statements आपके database को SQL injection attacks से security भी provide करते है।

MySQL में आप हर तरह के statement को prepare नहीं कर सकते है। जिन SQL statements को आप prepare कर सकते है उनकी list निचे दी जा रही है।

  1. SELECT
  2. INSERT
  3. UPDATE
  4. DELETE
  5. CREATE TABLE
  6. SET, DO & SHOW

आइये अब देखते है की आप किस प्रकार prepared statements create कर सकते है।

Creating a Prepared Statement

Prepared statement create करने के लिए आप PREPARE command यूज़ करते है। इसका general syntax निचे दिया जा रहा है।

mysql > PREPARE <name-of-prepared-statement> FROM <SQL statement with ?>

जैसा की आप ऊपर दिए गए syntax में देख सकते है, एक prepared statement में आपको 2 parameters define करने होते है। एक तो prepared statement का नाम और दूसरा वह SQL statement जिसे आप prepare करना चाहते है।

SQL statement को या तो आप एक string के रूप में define कर सकते है या फिर इसे एक variable में store करवाके उस variable को prepared statement में define कर सकते है। जब आप SQL statement को string के रूप में define करते है तो single quotes में define करते है।

SQL statement में वो values जो पहले से पता नहीं है उन्हें question mark (?) से दर्शाया जाता है। ये एक parameter की तरह काम करता है। जब statement को execute किया जाता है उस समय आप इन parameters के लिए values provide करवाते है।

MySQL server question mark (?) को values के द्वारा replace कर देता है। इस प्रकार जब भी आप prepared statement को execute करें तो अलग अलग values use कर सकते है। आइये अब इसे एक उदाहरण से समझने का प्रयास करते है।

मान लीजिये आपने database में निचे दी हुई Employee table create की हुई है।

इस table के लिए एक simple prepared statement इस प्रकार create किया जा सकता है।

mysql >  prepare mypstmnt from ‘select Name from Employee where Id=?’;

ऊपर दिया गया prepared statement Id के base पर Employee table से employee का नाम show करता है। WHERE clause के बाद Id column define किया गया है और उसकी value ना देकर question mark (?) दिया गया है।

आइये देखते है की create किये हुए prepared statement को execute कैसे करते है।

Executing MySQL Prepared Statements

एक बार prepared statement create होने के बाद आप उसे कितनी भी बार execute कर सकते है। यदि prepared statement में आपने question mark (?) parameter का उपयोग किया है तो उसके लिए value pass करना आवश्यक है। ऐसे statements को आप जितनी भी बार execute करेंगे आप हर बार value pass करेंगें।

Value pass करने के लिए आप एक variable को यूज़ कर सकते है। इसके लिए आप variable इस प्रकार create कर सकते है।

mysql > set @varName = ‘Value’;

उदाहरण के लिए यदि आप ऊपर create किये गए prepared statement के लिए Id value को pass करने के लिए variable create करना चाहते है तो इस प्रकार कर सकते है।

mysql > set @empId = ‘102’;

एक prepared statement use करने के लिए आप EXECUTE command यूज़ करते है। यदि आप argument pass कर रहे है तो इसके लिए आप USING clause यूज़ करेंगें। उदाहरण के तौर पर ऊपर create किये गए prepared statement को आप इस प्रकार execute करेंगें।

mysql > execute mypstmnt using @empId;

ऊपर दिया गया statement execute होने पर empId variable की value के साथ prepared statement में define किये गए SQL statement को execute करेगा। जब ये statement execute होगा तो result के रूप में employee का नाम Max show होगा।

De-allocating MySQL Prepared Statements

जब भी server से connection terminate होता है तो prepared statements automatically drop हो जाते है। लेकिन यदि फिर भी आप इन्हें manually drop करना चाहते है तो इसके लिए आप DEALLOCATE PREPARE statement यूज़ कर सकते है।

उदाहरण के लिए यदि आप ऊपर create किये गए prepared statement को drop करना चाहते है तो ऐसा आप इस प्रकार कर सकते है।

mysql > deallocate prepare mypstmnt;  

ऊपर दिए गए statement के execute होने पर mypstmnt prepared statement drop हो जायेगा।