For anyone else who wants to do this, I want to "pay this forward" by showing a working implementation of this concept:
DROP PROCEDURE IF EXISTS sp_DBR_workorder_report_listing
$$
CREATE PROCEDURE `sp_DBR_workorder_report_listing`(inIds text) #Parameter inIds accepts record IDs from a selectable report
BEGIN
DECLARE finished INTEGER DEFAULT 0; #To loop a Cursor you need a counter that can stop the loop, this is that counter variable
DECLARE tag_number VARCHAR(6) DEFAULT ""; #Arbitrary variable declaration, the Cursor needs to have each field declared as a variable for it to be usable in the report
DECLARE curFugitiveMeasurements #Declare the cursor and its select statement
CURSOR FOR
select fm.TAG_NUMBER
from database.ss_fugitive_measurements as fm
WHERE find_in_set(fm.ID,inIds); #find_in_ids(field,values) is a MYSQL command that will iterate through the comma-separated IDs matching them to the fm.ID column in the database
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1; #We must declare when the handler for when the loop has iterated through all records and the loop needs to end
OPEN curFugitiveMeasurements; #Cursors must be opened and closed, start by opening it of course
getFugitiveMeasurements: LOOP #Define the loop (can reference loop by name)
FETCH curFugitiveMeasurements INTO tag_number; #Fetch the DB record under the Cursor and place its value into the variable defined for the report
IF finished = 1 THEN #Loop will check on each run if this is the end of the Cursor or not, if it is, we LEAVE the loop
LEAVE getFugitiveMeasurements;
END IF;
SELECT 'dbr.template','#workorder_row'; #Here I define the Template to output this Cursor's record to
select
tag_number as 'tag_number'; #Here I define the variable into the field the Template is looking for. Unfortunately they are named the same...
END LOOP getFugitiveMeasurements; #Define the end of the loop
CLOSE curFugitiveMeasurements; #Close the Cursor to release resources and prevent issues with future Cursors
END
$$