2017-09-25 82 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'));