【问题标题】:node.js mySQL sending an array with INSERT statement formattingnode.js mySQL 发送带有 INSERT 语句格式的数组
【发布时间】:2019-02-14 19:30:15
【问题描述】:

我在一个从中打印的数组中有以下内容:

    console.log([userData]) //From HTML Form 
-------------------------------
[ [ 'test3',
    'Alice',
    'Weather',
    'Bob',
    'Doe',
    'john.doe@gmail.com',
    'Footballer',
    'male',
    'english',
    'married',
    '1965-01-02' ] ]

现在我需要将它插入到 mySQL 数据库中,结果是语法错误。我似乎不明白的是如何以 mySQL 可以“理解”的方式格式化数组

 var sql = "INSERT INTO users (uid,FirstName,LastName,MotherName,FatherName,Email,Profession,Gender,MaritalStatus,Birthday) VALUES ?";
con.query(sql, "'" + userData.join() + "'", function(err) {
    if (err) throw err;
    console.log("inserted")
});

输出:

错误:ER_PARSE_ERROR:您的SQL 语法有错误;查看 与您的 MySQL 服务器版本相对应的手册 附近使用的语法 ''\'test3,Alice,Weather,Bob,Doe,john.doe@gmail.com,Footballer,male,english,married,1965-01-02' 在第 1 行

谢谢。

【问题讨论】:

  • userdata 中的english 是什么?您在数据库中有相应的列吗?这就是问题所在。表中的列数和您传递的值数不同。
  • @HarshilDoshi 如果这是错误,那将是错误消息。
  • @HarshilDoshi 大获成功!这也是我忘记浏览的问题之一。

标签: mysql node.js passport.js


【解决方案1】:

你不应该加入userData,因为一旦加入,它就会变成一个完整的字符串,mysql库会替换成?。整个查询分解如下:

INSERT INTO users (uid,FirstName,LastName,MotherName,FatherName,Email,Profession,Gender,MaritalStatus,Birthday) VALUES "'test3,Alice,Weather,Bob,Doe,john.doe@gmail.com,Footballer,male,english,married,1965-01-02'"

这绝对是一个错误的 SQL。

要正确插入值,您必须将值按原样传递给 mysql 库:

con.query(sql, [[userData]], function(err) {
    if (err) throw err;
    console.log("inserted")
});

次要参数应该是“三元组”,即[[['test3', 'alice'....]]]。

第一个数组表示您正在传递一系列参数以供 mysql 库进行替换,第二个数组包含参数的值(即要替换为?),第三个数组告诉 mysql 库这参数是一个值数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多