SQLSTATE [HY093], where the number of parameters is correct [closed]

1

I'm trying to get out of a procedure, however SQLSTATE [HY093] appears: Invalid parameter number: number of bound variables does not match number of tokens , I saw some questions that this is due to number of parameters, however the PDO is passing 6 parameters, the same amount as the procedure requests.

PDO:

static function inserirCliente($cpf, $nome, $sobrenome, $usuario, $senha) {

    $con = ConnectionFactory::getConnection();
    $con->beginTransaction();

    try {
        $senha = password_hash($senha, PASSWORD_BCRYPT);
        // iniciando
        $resultado = ''; 
        $stmt = $con->prepare("call prc_cadastrar_usuario(:cpf, :nome, :sobrenome, :usuario, :senha, :msg)");
        // PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT
        $stmt->bindParam('cpf', $cpf);
        $stmt->bindParam('nome', $nome);
        $stmt->bindParam('sobrenome', $sobrenome);
        $stmt->bindParam('usuario', $usuario);
        $stmt->bindParam('senha', $senha);
        $stmt->bindParam(':msg', $resultado);
        // 


        if ($stmt->execute()) {
            $con->commit();
            $tabResultat = $stmt->fetch();
            $resultado = $tabResultat['msg'];
        } else {
            echo $stmt->errorCode();
            $con->rollBack();
        }
    } catch (PDOException $e) {
        $con->rollBack();
        echo $e->getMessage();
        echo $e->getLine();
    }
    $con = null;
    return $resultado;
}

Procedure:

CREATE DEFINER='root'@'localhost' PROCEDURE 'prc_cadastrar_usuario'(
in n_cpf varchar(11),
in n_nome nvarchar(30),
in n_sobrenome nvarchar(30),
in n_usuario nvarchar(30),
in n_senha nvarchar(255),
out msg nvarchar(200)
)
BEGIN
declare v_cpf varchar(11);
declare v_nome nvarchar(30);
declare v_sobrenome nvarchar(30);
declare v_usuario nvarchar(30);
declare v_senha nvarchar(255);

-- seleciona  no banco os dados que entraram
set v_cpf := (select cpf from tbl_usuario where cpf = n_cpf);
set v_usuario := (select usuario from tbl_login where usuario = n_usuario);

-- verifica se os dados da select são iguais aos que entraram
if ( (v_cpf is null) && (v_usuario is null) ) then
    insert into tbl_usuario (cpf, nome, sobrenome) values (n_cpf, n_nome, n_sobrenome);
    insert into tbl_login (usuario, senha, cpf_login_fk) values (n_usuario, n_senha, n_cpf);
    set msg := 'Cadastrado!'; 
elseif ( (v_cpf = n_cpf) && (v_usuario is null) ) then
    set msg := 'CPF já cadastrado!'; 
elseif ( (v_cpf is null) && (v_usuario = n_usuario) ) then  
    set msg := 'Usuário já cadastrado!'; 
else 
    set msg := 'Erro ao cadastrar';
end if;

END
    
asked by anonymous 10.07.2018 / 23:31

0 answers