Это не уязвимо, потому что код, который вы нам показали, использует буквальное значение для имени таблицы, а не параметра.Я думаю, что вы хотели сделать это:
CONCAT('CREATE TABLE ', tab_name, '
(id INT(10) PRIMARY KEY NOT NULL UNIQUE AUTO_INCREMENT,
name VARCHAR(45),
guid VARCHAR(36));');
А что если я вызову вашу функцию с ...
dummy (id INT NOT NULL); DROP TABLE mysql.users; CREATE TABLE dummy2
?
Это не удастся, потому чтоТочка с запятой и скобки будут отвергнуты регулярным выражением, но это далеко не надежное решение.
Добавление обратных кавычек вокруг имени таблицы (если они запрещены регулярным выражением) - это небольшое улучшение.
CONCAT('CREATE TABLE `', tab_name, '`