javascript - 我无法使插入忽略查询

标签 javascript knex.js

如何使用 knex 进行插入忽略查询?

我尝试过:

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
 });

但它的方式正确吗?

最佳答案

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

您永远不应该使用 .toString() 来构建查询,因为它可能很容易给您的代码留下 SQL 注入(inject)漏洞,尤其是在插入时。

一开始它没有执行任何操作,因为您从未触发查询。

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

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'));

关于javascript - 我无法使插入忽略查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46400332/

相关文章:

javascript - JavaScript 函数查找数组中最常见元素的速度差异

javascript - 带延迟的递归函数

mysql - Bookshelf.js 使用 rand() 随机排序项目

mysql - 如何用nodejs从mysql解码汉字

node.js - 如何使用书架js输出1对多对象

postgresql - 如何在数据库中设置另一个用户名?

javascript - 高度自动在 div 内的 div 中不起作用

javascript - express 和 Passport 错误 : Unknown authentication strategy "login"

javascript - asp.net MVC 与 MVVM 通过 Knockout,将模型传递给 javascript

javascript - 在两种方法之间交互代码的最佳方法是什么