Может показаться странным, но вы можете назначить переменную непосредственно в подготовленной строке оператора:
PREPARE stmt FROM 'SELECT @i := id FROM ...';
-- ...
EXECUTE stmt USING @m, @c, @a;
-- @i will hold the id returned from your query.
Контрольный пример:
CREATE TABLE actions (id int, a int);
INSERT INTO actions VALUES (1, 100);
INSERT INTO actions VALUES (2, 200);
INSERT INTO actions VALUES (3, 300);
INSERT INTO actions VALUES (4, 400);
INSERT INTO actions VALUES (5, 500);
DELIMITER $$
CREATE PROCEDURE myProc(
IN p int
)
MODIFIES SQL DATA
BEGIN
PREPARE stmt FROM 'SELECT @i := id FROM actions WHERE `a` = ?';
SET @a = p;
EXECUTE stmt USING @a;
SELECT @i AS result;
DEALLOCATE PREPARE stmt;
END
$$
DELIMITER ;
Результат:
CALL myProc(400);
+---------+
| result |
+---------+
| 4 |
+---------+
1 row in set (0.00 sec)