Javascript 如何仅在数组元素不存在时将其插入数据库
以下是我的数据库模式:Javascript 如何仅在数组元素不存在时将其插入数据库,javascript,mysql,sql,node.js,node-mysql,Javascript,Mysql,Sql,Node.js,Node Mysql,以下是我的数据库模式: CREATE TABLE technologies ( technologyName VARCHAR(50) NOT NULL PRIMARY KEY ); CREATE TABLE videos ( videoId INT NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(300) NOT NULL, url
CREATE TABLE technologies (
technologyName VARCHAR(50) NOT NULL PRIMARY KEY
);
CREATE TABLE videos (
videoId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(300) NOT NULL,
url VARCHAR(300) NOT NULL,
description VARCHAR(300) NOT NULL,
channelName VARCHAR(300) NOT NULL
);
CREATE TABLE technology_video_map (
videoId INT,
technologyName VARCHAR(50),
PRIMARY KEY (videoId, technologyName),
FOREIGN KEY (videoId) REFERENCES videos(videoId),
FOREIGN KEY (technologyName) REFERENCES technologies(technologyName)
);
我希望用户提交视频:
var input = {
title: 'Grunt makes your web development better!',
url: 'https://www.youtube.com/watch?v=TMKj0BxzVgw',
description: 'If you\'re not using a task runner/build system like Grunt or Gulp...',
channelName: 'LearnCode.academy',
technologies: ['Grunt', 'JavaScript']
};
我想把它插入数据库。仅插入视频对我来说非常简单:
var technologies = input.technologies; // save for later
delete input.technologies;
connection.query('INSERT INTO videos SET ?', input, function (err, result) {
var videoId = result.insertId;
});
(连接
来自brilliant)
我遇到的问题是,将这些技术插入数据库。我已确定第一步是:
input.technologies
中的元素插入technologies
表(如果它们不存在)for
循环或一些令人恶心的东西来实现这一点
我认为第二步是:
technology\u video\u map
来自连接。查询回调,因为我们需要videoId
李>
同样,我无法想象使用SQL实现这一点的惯用方法。有人能给我引路吗?你得检查一下它是否存在
if not exists(select technologyName from technoligies
where technologyName='$technologies')
insert (..)
如果您没有使用存储过程,则触发一个查询以获取它。如果失败,则插入它。您可以使用insert IGNORE并加入input.technologies数组。这将插入不存在的记录,并将忽略已存在的记录
var query = "INSERT IGNORE INTO technologies (technologyName) VALUES ('" + input.technologies.join("'),('") + "')";
它不应该是“如果不存在”而没有感叹号吗?我从来不知道它存在。谢谢。我不知道插入忽略,所以谢谢你。这不容易受到SQL注入的攻击吗?如果是,在这种情况下如何防止SQL注入?insert ignore本身不易受到SQL注入的攻击。如果将查询放入连接中,节点mysql已经执行转义。query('SELECT blah FROM blahblah WHERE blah=?',myString,function(err,result){})
。您还可以直接转义input.technologies。有关更多详细信息,请参阅此链接