Chris
Chris

Reputation: 1587

Nodejs Mysql Insert is adding backslashes to strings and fails

I'm trying to do a simple sql insert using nodejs and express trying various formats I've found online, but this appears to be the accepted way. When I view the error it's adding extra backslashes to the query and failing.

The code:

console.log(request.body);

        var post = {uid: request.session.uid, title: request.body.title, created: request.body.createdAt};
        connection.query('INSERT INTO projects (uid, title, created) SET ? ', post, function (error, results, fields) {
            console.log(error);
        });

The first body console.log:

{ title: 'aewgawegr', createdAt: '1574219119301' }

The error message:

  sqlMessage:
   'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'SET `uid` = 1, `title` = \'aewgawegr\', `created` = \'1574219119301\'\' at line 1',
  sqlState: '42000',
  index: 0,
  sql:
   'INSERT INTO projects (uid, title, created) SET `uid` = 1, `title` = \'aewgawegr\', `created` = \'1574219119301\' ' }

Upvotes: 2

Views: 644

Answers (2)

Usman Saeed
Usman Saeed

Reputation: 211

You can do something like this instead of passing json object

"INSERT INTO projects (uid, title, created)  VALUES (1, 'Michelle', 'Blue Village 1')";

e.g in your case you can use string interpolation:

`INSERT INTO projects (uid, title, created)  VALUES ('${request.session.uid}', '${request.body.title}', '${request.body.createdAt}')`;

Upvotes: 0

Terry Wu
Terry Wu

Reputation: 178

For reference: https://dev.mysql.com/doc/refman/8.0/en/insert.html

You cannot combine the two usage syntax:

INSERt INTO `table` (column1, ...) VALUES (value1, ...

with

INSERT INTO `table` SET `column1`='value1', ....

Upvotes: 1

Related Questions