3
respostas

Retorno de uma Função

na minha função insereNota realizo uma query para o banco de dados conforme abaixo, se eu executar um var_dump pegar o resultado e faço um sql direto no banco de dados os dados são incluidos com sucesso, porém, quando executo a query pelo php, não está retornando os dados incluidos. Poderiam me ajudar? segue o codigo

function insereNota($conexao,$lancamento)
    {
    
        $query = "insert into lancamentos (usuario_id, usuario_email, usuario_nome, numero_nota,
                 valor, parceiros_id,tipo_lancamento_id) values ({$lancamento->getUsuario()},
                 '{$lancamento->getUsuario_email()}', '{$lancamento->getUsuario_nome()}',
                 '{$lancamento->getgeraSenha()}', {$lancamento->getValor()}, 
                 {$lancamento->getParceiro()}, {$lancamento->getTipo_lancamento()});
                 SET @last_id_in_lancamentos = LAST_INSERT_ID();
                
                 	insert into cc_multiplo (valor, lancamento_id) values({$lancamento->getValor()} * 0.03, @last_id_in_lancamentos);
                    insert into cc_cliente (valor, lancamento_id) values({$lancamento->getValor()} * 0.07, @last_id_in_lancamentos);
                    insert into cc_parceiro (valor, lancamento_id) values(-{$lancamento->getValor()} * 0.10,@last_id_in_lancamentos);
                    ";
                
        //var_dump($query);exit;
    linha81:	return mysqli_query($this->$conexao, $query);
    
    }

esse é o erro que notifica:

Fatal error: Uncaught Error: Object of class mysqli could not be converted to string in C:\Bitnami\wampstack-7.4.7-0\apache2\htdocs\multi\app\lancamentoDAO.php:81 Stack trace: #0 C:\Bitnami\wampstack-7.4.7-0\apache2\htdocs\multi\app\cria-nota.php(42): lancamentoDAO->insereNota() #1 {main} thrown in C:\Bitnami\wampstack-7.4.7-0\apache2\htdocs\multi\app\lancamentoDAO.php on line 81
linha 81: `return mysqli_query($this->$conexao, $query);`
3 respostas

Opa Sergio, tudo certo?

O problema em questão se encontra na linha 81. No seu código, você usou $this->$conexao, o que pode estar causando a conversão incorreta do objeto mysqli em uma string. Pode ser que esteja interpretando a variável como um nome e não como uma variável. Sugiro tentar utilizar $this->conexao:

return mysqli_query($this->conexao, $query);

Fico à disposição.

Tenha um bom dia e bons estudos.

Muito obrigado pelo seu retorno Gabriel, corrigi o erro e mesmo assim não consegui inserir os registros pelo php, se eu copio e colo a query diretamente no BD ela executa perfeitamente. O que mais poderia acarretar esse erro? Seria alguma coisa relacionada ao SET@last_id ?

function insereNota($conexao,$lancamento)
    {
    
        $query = "insert into lancamentos (usuario_id, usuario_email, usuario_nome, numero_nota,
                 valor, parceiros_id,tipo_lancamento_id) values ({$lancamento->getUsuario()},
                 '{$lancamento->getUsuario_email()}', '{$lancamento->getUsuario_nome()}',
                 '{$lancamento->getgeraSenha()}', {$lancamento->getValor()}, 
                 {$lancamento->getParceiro()}, {$lancamento->getTipo_lancamento()});
                 SET @last_id_in_lancamentos = LAST_INSERT_ID();
                
                 	insert into cc_multiplo (valor, lancamento_id) values({$lancamento->getValor()} * 0.03, @last_id_in_lancamentos);
                    insert into cc_cliente (valor, lancamento_id) values({$lancamento->getValor()} * 0.07, @last_id_in_lancamentos);
                    insert into cc_parceiro (valor, lancamento_id) values(-{$lancamento->getValor()} * 0.10,@last_id_in_lancamentos);
                    ";
                    


var_dump($query);exit;
        return mysqli_query($this->conexao,$query);
        
    }

esse é o var_dump da query:

string(577) "insert into lancamentos (usuario_id, usuario_email, usuario_nome, numero_nota, valor, parceiros_id,tipo_lancamento_id) values (273, 'xxxxxxxxxxx@gmail.com', '', '981MTDNV9S1N', 200, 4, 1); SET @last_id_in_lancamentos = LAST_INSERT_ID(); insert into cc_multiplo(valor, lancamento_id) values(200 * 0.03, @last_id_in_lancamentos); insert into cc_cliente (valor, lancamento_id) values(200 * 0.07, @last_id_in_lancamentos); insert into cc_parceiro (valor, lancamento_id) values(-200 * 0.10,@last_id_in_lancamentos); "

se eu executar (retirar o var_dump) não retorna nada e também não adiciona ao BD

Gabriel, essa foi a solução que encontrei para inserir em 4 tabelas diferentes ao mesmo tempo no BD,. Em SQL a query acima funciona mas em PHP me parece que não consigo inserir em 4 tabelas diferentes ao mesmo tempo e trazer qualquer retorno. Você conheceria alguma outra solução? obrigado!

Opa Sergio.

Nesse caso, recomendo o uso da biblioteca Doctrine para otimizar sua abordagem na manipulação de bancos de dados com PHP. Embora seja possível programar diretamente em PHP para consultas SQL, a Doctrine oferece um mapeamento objeto-relacional (ORM) que simplifica a interação com bancos de dados relacionais.

Isso permite tratar dados como objetos, o que resulta em um código mais claro e de fácil manutenção, além de gerenciar automaticamente relacionamentos entre entidades e fornecer sua própria linguagem de consulta, DQL, para uma abordagem mais orientada a objetos.

Fico à disposição.