Eu tenho um procedimento armazenado simples:
DELIMITER $$
CREATE PROCEDURE `findUserByName`(IN `name` VARCHAR(36))
BEGIN
set @name = name;
PREPARE findStmt FROM 'SELECT * FROM user WHERE name=?';
EXECUTE findStmt USING @name;
END$$
Eu chamo isso em PHP com o método prepare:
$stmt = $mysqli->prepare('CALL findUserByName(?)');
$stmt->execute([$inputName]);
Tenho 2 perguntas sobre o código acima:
Esta instrução de atribuição
set @name = name;
parece um tanto redundante. Posso usar o parâmetro diretamentename
? O MySQL não me permite usarUSING name
, também tentei alterar o nome do parâmetro para@name
, mas não será reconhecido.Como usei o método prepare em PHP, é seguro concatenar o parâmetro com SQL?
set @sql = CONCAT('SELECT * FROM user WHERE name=''', name, ''''); PREPARE findStmt FROM @sql; EXECUTE findStmt;