2017-09-25 78 views
0

我怎么可以使用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

有正在进行的pull请求正式支持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'));