Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ดึงค่าผลลัพธ์จาก MySQL Prepared Statement

ใช้ PREPARE, EXECUTE ร่วมกับ User Variable (@var) เพื่อรับค่าจาก Prepared Statement ใน Stored Procedure

ตัวอย่าง: Stored Procedure สร้าง Prepared Statement คืนค่า

mysql> DELIMITER //
mysql> CREATE PROCEDURE return_value()
    -> BEGIN
    ->     SET @returnQuery = 'SELECT 98 INTO @value';
    ->     PREPARE stmt FROM @returnQuery;
    ->     EXECUTE stmt;
    -> END
    -> //
Query OK, 0 rows affected (0.20 sec)
mysql> DELIMITER ;

เรียกใช้และดูผลลัพธ์

mysql> CALL return_value();
Query OK, 1 row affected (0.07 sec)

mysql> SELECT @value;

ผลลัพธ์

+--------+
| @value |
+--------+
| 98     |
+--------+

ขั้นตอน Prepared Statement

  1. PREPARE stmt FROM 'SQL string' - คอมไพล์คำสั่ง
  2. EXECUTE stmt [USING @var1, @var2, ...] - รันคำสั่ง (ส่งพารามิเตอร์ได้)
  3. DEALLOCATE PREPARE stmt - ปล่อยหน่วยความจำ

ตัวอย่างเต็มรูปแบบ: มี Parameter

DELIMITER //
CREATE PROCEDURE get_user_by_id(IN uid INT, OUT uname VARCHAR(100))
BEGIN
    SET @sql = 'SELECT Name INTO @out_name FROM users WHERE Id = ?';
    PREPARE stmt FROM @sql;
    SET @param = uid;
    EXECUTE stmt USING @param;
    DEALLOCATE PREPARE stmt;
    SET uname = @out_name;
END //
DELIMITER ;

-- เรียกใช้
CALL get_user_by_id(1, @result);
SELECT @result;

ข้อควรระวัง

  • Prepared Statement อยู่ใน Session scope
  • ต้อง DEALLOCATE PREPARE เพื่อไม่รั่ว Memory
  • User Variable (@var) ใช้ส่งค่าระหว่าง Prepared Statement และ Procedure