6
respostas

Erro ao inserir no banco

Estou utilizando a versão do 2 do mysql, porem não estou conseguindo inserir as informações no banco.

Segue codigo:

const mysql  = require('mysql2');    

class PagamentoDao{

    salva(pagamento){
        const _connection = mysql.createConnection({
            host: 'localhost',
            user: 'nodeuser',
            password:'node@node',
            database: 'payfast'
        });

        return new Promise(function(resolve,reject) {
            _connection.config.namedPlaceholders = true;
            _connection.execute( 'INSERT INTO pagamentos SET ? ', pagamento , function(err,results,fields){
               if(err){
                   return reject();
               }
               return resolve(results);
            });

        });
    }              

}

module.exports = PagamentoDao;

Pesquisando na documentação do mysql2 existe a configuração do namedPlaceholders=true, habilitando essa opção eu tenho o seguinte erro retornado:

TypeError: Bind parameters must not contain undefined. To pass SQL NULL specify JS null
    at options.values.forEach.val (......)
    at Array.forEach (<anonymous>)
    at Connection.execute ....

Caso eu remova essa opção do namedPlaceholders, eu tenho o seguinte erro:

TypeError: Bind parameters must be array if namedPlaceholders parameter is not enabled
    at Connection.execute .... 

Como eu poderia implementar corretamente o insert utilizando essa versão do mysql ?

Obrigado !!!

6 respostas

Pablo, boa tarde!

Eu vejo dois possíveis caminhos, atualizar o seu mysql para pelo menos o 5.7, ou me parece que um dos dados que você está querendo inserir está nulo. Outro ponto é que o se você remove a opção namedPlacehholders, você deve passar um array com os valores e não o objeto, espero ter ajudado e bons estudos!

Ola Felipe,

De acordo com o site da NPM essa versão do mysql é a mais atual:

https://www.npmjs.com/package/mysql2

Eu até pensei em passar um array com as informações, porem tomo erro de sintaxe.

....connection.query( 'INSERT INTO pagamentos (formade_pagamento, valor, moeda, descricao, status, data) SET ? ', [pagamento.forma_de_pagamento, pagamento.valor, pagamento.moeda, pagamento.descricao, pagamento.status, pagamento.data] , function(err,results,fields){....

Pablo, boa tarde!

Realmente é a versão mais recente do MySQL, mas esse é o pacote do npm.

mysql -v
Server version: 5.7.27

Veja que a versão instalada é a 5.7, pois o pacote mysql e o banco de dados mysql são diferentes.

Você poderia compartilhar seu projeto com a gente para que possamos testar?

Aguardo sua resposta e bons estudos!

Felipe minha versão é a 8.0.17.

Você poderia compartilhar seu código via github para que eu possa testar e rodar aqui?

Fala Felipe beleza ???

Subi sim esta aqui:

https://github.com/pablopinheiro01/nodejs-payfast

Obrigado pela ajuda !!!