Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में प्रिपेयर्ड स्टेटमेंट से SQL परिणाम को वेरिएबल में असाइन करना (स्टोर्ड प्रोसीजर)

MySQL में प्रिपेयर्ड स्टेटमेंट का उपयोग करके डायनामिक SQL चलाने और परिणाम को यूजर-डिफाइंड वेरिएबल में असाइन करने के लिए स्टोर्ड प्रोसीजर में PREPARE, EXECUTE, DEALLOCATE PREPARE का उपयोग करें।

सिंटैक्स

SET @sql = CONCAT('SELECT ', column, ' INTO @var FROM ', table, ' WHERE id = ', id);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SELECT @var;

व्यावहारिक उदाहरण

1. टेबल बनाएं और डेटा डालें

mysql> CREATE TABLE DemoTable (Id INT, Name VARCHAR(100));
Query OK, 0 rows affected (1.51 sec)

mysql> INSERT INTO DemoTable VALUES (10, 'John'), (11, 'Chris');
Query OK, 2 rows affected (0.20 sec)

2. स्टोर्ड प्रोसीजर बनाएं

mysql> DELIMITER //
mysql> CREATE PROCEDURE Prepared_Statement_Demo(
    IN nameOfTable VARCHAR(20),
    IN nameOfColumn VARCHAR(20),
    IN idColumnName INT
)
BEGIN
    SET @holdResult = CONCAT('SELECT ', nameOfColumn, ' INTO @value FROM ', nameOfTable, ' WHERE id = ', idColumnName);
    PREPARE st FROM @holdResult;
    EXECUTE st;
    DEALLOCATE PREPARE st;
END //
Query OK, 0 rows affected (0.20 sec)
mysql> DELIMITER ;

3. प्रोसीजर कॉल करें

mysql> CALL Prepared_Statement_Demo('DemoTable', 'Name', 10);
Query OK, 0 rows affected, 2 warnings (0.00 sec)

4. परिणाम वेरिएबल से प्राप्त करें

mysql> SELECT @value;
+--------+
| @value |
+--------+
| John   |
+--------+
1 row in set (0.00 sec)

चरण-दर-चरण व्याख्या

  1. CONCAT() - डायनामिक SQL स्ट्रिंग बनाता है
  2. INTO @value - परिणाम को वेरिएबल में स्टोर करता है
  3. PREPARE - SQL स्ट्रिंग से स्टेटमेंट तैयार करता है
  4. EXECUTE - तैयार स्टेटमेंट चलाता है
  5. DEALLOCATE PREPARE - स्टेटमेंट हैंडल मुक्त करता है (महत्वपूर्ण!)

सुरक्षा चेतावनी: SQL इंजेक्शन

-- असुरक्षित: सीधे कन्कैटेनेशन
SET @sql = CONCAT('SELECT * FROM ', table_name, ' WHERE id = ', user_input);

-- सुरक्षित: प्लेसहोल्डर उपयोग करें (MySQL 8.0+ में प्लेसहोल्डर सीमित)
-- एप्लिकेशन लेयर पर पैरामीटराइज़्ड क्वेरी प्राथमिकता दें

उन्नत: परिणाम सेट के लिए कर्सर

CREATE PROCEDURE GetRows(IN tbl VARCHAR(50))
BEGIN
    SET @sql = CONCAT('SELECT * FROM ', tbl);
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END;

DEALLOCATE PREPARE का महत्व

  • तैयार स्टेटमेंट्स सत्र संसाधन उपयोग करते हैं
  • अधिकतम max_prepared_stmt_count (डिफ़ॉल्ट 16,382) तक सीमित
  • लीक होने पर "Too many prepared statements" एरर
  • हमेशा DEALLOCATE PREPARE कॉल करें
  1. टर्मिनल से MySQL डेटाबेस में SQL फाइल कैसे चलाएं? टर्मिनल से MySQL डेटाबेस में SQL फाइल कैसे चलाएं?

    कमांड लाइन से SQL फाइल एक्जीक्यूट करना टर्मिनल/कमांड प्रॉम्प्ट से SQL फाइल चलाने के लिए: mysql -u yourUserName -p yourDatabaseName < yourFileName.sql चरण-दर-चरण प्रक्रिया (Windows) कमांड प्रॉम्प्ट खोलें: Win+R → cmd → Enter MySQL bin डायरेक्टरी में जाएं: cd C:\Program Files\MySQL\MySQL Ser

  1. - MySQL का स्टैंडर्ड SQL से अंतर

    आइए MySQL और स्टैंडर्ड SQL के बीच के अंतर को समझते हैं। MySQL कुछ मामलों में कई ऑपरेशन्स अलग तरह से करता है: विशेषाधिकार (Privileges) उपयोगकर्ता को दिए गए विशेषाधिकारों के संबंध में MySQL और स्टैंडर्ड SQL के बीच कई अंतर हैं। MySQL में, जब कोई टेबल डिलीट की जाती है तो उसके लिए विशेषाधिकार स्वचालित

  1. - MySQL क्लाइंट पर टेक्स्ट फ़ाइल से SQL स्टेटमेंट निष्पादित करना

    mysql क्लाइंट आमतौर पर इंटरैक्टिव उपयोग होता है, लेकिन SQL स्टेटमेंट फ़ाइल से भी निष्पादित कर सकते हैं। विधि 1: शेल रीडायरेक्शन mysql db_name < text_file यदि फ़ाइल में पहली स्टेटमेंट USE db_name है, तो कमांड लाइन पर डेटाबेस नाम देना अनावश्यक: mysql < text_file विधि 2: mysql प्रॉम्प्ट के अंदर \.