You need to use prepared statements for the name of the dynamic table. Prepared statements support parameters, but you cannot use them for table names.
Also to combine the strings you need to use CONCAT().
Oh, and you need to do all this in a stored procedure.
:
DELIMITER $$
CREATE PROCEDURE sp_exec_dynStmt()
BEGIN
SET @id := 47;
SET @table := CONCAT(@id, '_2013_2014_voucher');
SET @sql := CONCAT('SELECT * FROM ', @table, ';');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @sql = CONCAT('DELETE FROM ', @table, ' WHERE id = ?;');
PREPARE stmt FROM @sql;
EXECUTE stmt USING @id;
END $$
DELIMITER ;
:
CALL sp_exec_dynStmt();