mysql - Node sql语法错误

标签 mysql sql node.js syntax

我对使用 Node 和 Express 有点陌生,我正在尝试在我的 Node 应用程序中对 mysql 数据库进行简单的插入,但我不断收到 ER_PARSE_ERROR [i].year, courseData[我].term....

我试图查看一个类(class)对象数组(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);
        });
    }

我尝试过单引号、双引号、表名周围的反引号,但没有任何效果。没有看到任何类似的问题,所以我想试试运气。

谢谢!

最佳答案

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

1) 亚伦·迪茨是正确的。您需要在年份列上加反引号

2)当前您插入的是对象名称的字符串值而不是对象。例如,您插入“courseData[i].title”而不是对象该部分的实际内容。此外,连接 sql 代码会受到 sql 注入(inject)攻击。使用此处描述的转义方法 https://github.com/mysqljs/mysql .

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

请告诉我这是否适合您。

关于mysql - Node sql语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47442567/

相关文章:

mysql - 这是更新多行的可行方法吗?

sql - SQL中根据 "First Name"+ "Last Name"过滤行

mysql - 无法理解在mysql查询中使用聚合函数的结果

node.js - 无法使用 Sequelize ORM 连接到 AWS RDS

javascript - Grunt/Docker 文件路径

php - 使用 PHP 和 AJAX 插入 MySQL 记录

mysql - 简单表上的 "Lock wait timeout exceeded; try restarting transaction"

mysql - 使用日期开始的年龄并创建一个年龄阶段列

sql - 使用 Korma 清理 Clojure 中的数据库输入

javascript - Node.js:客户端模板与服务器端模板