Mysql 节点sql语法错误

Mysql 节点sql语法错误,mysql,sql,node.js,syntax,Mysql,Sql,Node.js,Syntax,我对使用node和express有点陌生,我正试图在我的node应用程序中简单地插入mysql数据库,但我不断收到一个ER_PARSE_错误[I]。年份,courseData[I]。术语 我试着查看一个course对象数组(courseData),将每个值插入到它们的列名中。这就是我的目的 for (var i = 0; i < courseData.length; i++){ var i = 1; let sql = "INSERT INTO Course

我对使用node和express有点陌生,我正试图在我的node应用程序中简单地插入mysql数据库,但我不断收到一个ER_PARSE_错误
[I]。年份,courseData[I]。术语

我试着查看一个course对象数组(courseData),将每个值插入到它们的列名中。这就是我的目的

for (var i = 0; i < courseData.length; i++){
        var i = 1;
        let sql = "INSERT INTO Course (year, term, code, title, " 
                    + "capacity, enrollment, credits, "
                    + "mon, tue, wed, thu, fri, sat, " 
                    + "instructorLast, instructorFirst, " 
                    + "startDate, endDate, building, room) "
                   + "VALUES (courseData[i].year, courseData[i].term, courseData[i].code, "
                    + "courseData[i].title, courseData[i].capacity, courseData[i].enrollment, "
                    + "courseData[i].credits, courseData[i].mon, courseData[i].tue, "
                    + "courseData[i].wed, courseData[i].thu, courseData[i].fri "
                    + "courseData[i].sat, courseData[i].instructorLast, courseData[i].instructorFirst, "
                    + "courseData[i].startDate, courseData[i].endDate, courseData[i].building, courseData[i].room); ";

        db.query(sql, function(err, result, fields){
            console.log(err);
        });
    }
for(变量i=0;i
我尝试了单引号、双引号、在我的表名周围加上反勾号,但都没有效果。没有看到任何类似的问题,所以我想试试运气


谢谢大家!

我认为修复此代码需要两件事

1) 亚伦·迪茨是对的。在“年份”列上需要反勾号

2) 当前正在插入objectname的字符串值,而不是对象。例如,插入“courseData[i].title”而不是对象该部分的实际内容。此外,连接sql代码也会受到sql注入攻击。使用此处描述的转义方法

for(变量i=0;i

让我知道这是否适合你

year
是MySQL保留字。你需要在使用该列的任何地方使用反勾号来转义该列。啊,我不知道。也许更改我的列名会更容易不?从长远来看肯定会容易得多
dYear
是我的目标。你说得对……我只是假设双引号可以解释我的语法。但是现在我有一个不同的问题…我的一些值,比如title和code,在它们里面有空格,并且抛出错误。我尝试了这个(“courseData[I].title”),但它仍然只是打印字符串文字。在MySQL中,这些文字也需要反勾号,对吗?(我更喜欢SQL Server)因此您需要在字符串部分合并反勾号,而不更改从JavaScript对象获取的变量。请参阅更新的答案。警告此代码易受SQL注入攻击。不要在SQL查询中连接值,请使用参数化查询。您是正确的。太过专注于最初的问题。现在更新答案。@jcaron你是对的,但这基本上是一次性代码,我只需要插入数据,就不需要再这样做了。
for (var i = 0; i < courseData.length; i++){
    var i = 1;
    let sql = `INSERT INTO Course (dyear, term, code, title,
                capacity, enrollment, credits,
                mon, tue, wed, thu, fri, sat,
               instructorLast, instructorFirst,
                startDate, endDate, building, room)
               VALUES (?, ? , ?, ?, ?, ?, ?, ?, ?,
               ?,?,?,?,?,?,?,?,?,?)`;
    let inserts = [courseData[i].year, courseData[i].term, 
              courseData[i].code, courseData[i].title, 
              courseData[i].capacity, courseData[i].enrollment, 
              courseData[i].credits, courseData[i].mon, 
              courseData[i].tue, courseData[i].wed, 
              courseData[i].thu, courseData[i].fri, 
              courseData[i].sat, courseData[i].instructorLast, 
              courseData[i].instructorFirst, courseData[i].startDate, 
              courseData[i].endDate, courseData[i].building, 
              courseData[i].room];
    sql = mysql.format(sql, inserts);

    db.query(sql, function(err, result, fields){
        console.log(err);
    });
}