我无法进行插入忽略查询

时间:2017-09-25 08:06:49

标签: javascript knex.js

如何使用knex进行insert ignore查询?

我试过了:

knex.raw(knex('music').insert({title: service[i].Title, author: service[i].PrimaryArtistName, album: service[i].TypeAlbumName, lyrics: service[i].Lyrics}).toString().replace("insert", 'insert ignore'));

但它不起作用

更新: 如果我添加

,它的工作
.then(function (res) {
 console.log("res", res);// or another code
 });

但它的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

正在进行拉取请求以正式支持此knex API。我希望它准备好下一个版本https://github.com/tgriesser/knex/pull/2197

您永远不应该使用.toString()来构建查询,因为它可能会轻易地将sql注入漏洞留给您的代码,尤其是使用插入。

一开始它没有做任何事情,因为你从未触发过查询。

目前,您可以实现同样更安全的方式:

const query = knex('music')
  .insert({
    title: service[i].Title, 
    author: service[i].PrimaryArtistName, 
    album: service[i].TypeAlbumName, 
    lyrics: service[i].Lyrics
  }).toSQL();

const sql = query.sql.replace("insert", 'insert ignore');
knex.raw(sql, query.bindings).then(() => console.log('insert is ready'));