【问题标题】:Error posting into mysql database through express通过 express 发布到 mysql 数据库时出错
【发布时间】:2021-01-06 09:25:26
【问题描述】:

我正在从我的 react 前端向我的 express api 发送一个帖子。我一直收到对象到我的模型,但尝试插入数据时出错。

Customer.newUser = (customer) => {
    return db.then(function(conn){
        return conn.query(
            `INSERT INTO customers (FirstName, LastName, Age) VALUES (${customer.FirstName}, ${customer.LastName}, ${customer.Age})`
        );
    })
}

所有变量和数据都在正确的位置,但我不断收到此错误

Port : 3001
{ first: 'Joey', last: 'dip', age: 29 } 'idjfosjdsofij'
{ Error: ER_BAD_FIELD_ERROR: Unknown column 'Joey' in 'field list'
    at Query.Sequence._packetToError (/Users/joey.diperi/Documents/websites/lorea_elvive_quiz/node_modules/mysql/lib/protocol/sequences/Sequence.js:52:14)
    at Query.ErrorPacket (/Users/joey.diperi/Documents/websites/lorea_elvive_quiz/node_modules/mysql/lib/protocol/sequences/Query.js:77:18)
    at Protocol._parsePacket (/Users/joey.diperi/Documents/websites/lorea_elvive_quiz/node_modules/mysql/lib/protocol/Protocol.js:279:23)
    at Parser.write (/Users/joey.diperi/Documents/websites/lorea_elvive_quiz/node_modules/mysql/lib/protocol/Parser.js:76:12)
    at Protocol.write (/Users/joey.diperi/Documents/websites/lorea_elvive_quiz/node_modules/mysql/lib/protocol/Protocol.js:39:16)
    at Socket.<anonymous> (/Users/joey.diperi/Documents/websites/lorea_elvive_quiz/node_modules/mysql/lib/Connection.js:103:28)
    at emitOne (events.js:116:13)
    at Socket.emit (events.js:211:7)
    at addChunk (_stream_readable.js:263:12)
    at readableAddChunk (_stream_readable.js:250:11)
    at Socket.Readable.push (_stream_readable.js:208:10)
    at TCP.onread (net.js:594:20)
    --------------------
    at Protocol._enqueue (/Users/joey.diperi/Documents/websites/lorea_elvive_quiz/node_modules/mysql/lib/protocol/Protocol.js:145:48)
    at Connection.query (/Users/joey.diperi/Documents/websites/lorea_elvive_quiz/node_modules/mysql/lib/Connection.js:208:25)
    at /Users/joey.diperi/Documents/websites/lorea_elvive_quiz/node_modules/promise-mysql/lib/helper.js:16:24
    at Promise._execute (/Users/joey.diperi/Documents/websites/lorea_elvive_quiz/node_modules/bluebird/js/release/debuggability.js:303:9)
    at Promise._resolveFromExecutor (/Users/joey.diperi/Documents/websites/lorea_elvive_quiz/node_modules/bluebird/js/release/promise.js:483:18)
    at new Promise (/Users/joey.diperi/Documents/websites/lorea_elvive_quiz/node_modules/bluebird/js/release/promise.js:79:10)
    at Connection.promiseCallback (/Users/joey.diperi/Documents/websites/lorea_elvive_quiz/node_modules/promise-mysql/lib/helper.js:6:10)
    at connection.query (/Users/joey.diperi/Documents/websites/lorea_elvive_quiz/node_modules/promise-mysql/lib/connection.js:64:28)
    at /Users/joey.diperi/Documents/websites/lorea_elvive_quiz/models/customer.js:13:21
    at tryCatcher (/Users/joey.diperi/Documents/websites/lorea_elvive_quiz/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/Users/joey.diperi/Documents/websites/lorea_elvive_quiz/node_modules/bluebird/js/release/promise.js:512:31)
    at Promise._settlePromise (/Users/joey.diperi/Documents/websites/lorea_elvive_quiz/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromiseCtx (/Users/joey.diperi/Documents/websites/lorea_elvive_quiz/node_modules/bluebird/js/release/promise.js:606:10)
    at Async._drainQueue (/Users/joey.diperi/Documents/websites/lorea_elvive_quiz/node_modules/bluebird/js/release/async.js:138:12)
    at Async._drainQueues (/Users/joey.diperi/Documents/websites/lorea_elvive_quiz/node_modules/bluebird/js/release/async.js:143:10)
    at Immediate.Async.drainQueues [as _onImmediate] (/Users/joey.diperi/Documents/websites/lorea_elvive_quiz/node_modules/bluebird/js/release/async.js:17:14)
  code: 'ER_BAD_FIELD_ERROR',
  errno: 1054,
  sqlMessage: 'Unknown column \'Joey\' in \'field list\'',
  sqlState: '42S22',
  index: 0,
  sql: 'INSERT INTO customers (FirstName, LastName, Age) VALUES (Joey, dip, 29)' }
POST /customer 500 35.348 ms - 212

【问题讨论】:

    标签: mysql sql node.js express


    【解决方案1】:

    您的语法不正确。 DB 获取它的方式是将其作为 COLUMN 读取,而不是作为值读取。

    'ER_BAD_FIELD_ERROR', errno: 1054, sqlMessage: '未知列 \'Joey\' in \'field list\'', sqlState: '42S22', index: 0, sql: 'INSERT INTO customers (FirstName, LastName , 年龄) 价值观 (Joey, dip, 29)' }

    看这个例子:java sql insert

    【讨论】:

    • 语法在我看来是一样的。 INSERT INTO TABLE_NAME (column1, column2, column3,...columnN) VALUES (value1, value2, value3,...valueN);
    【解决方案2】:

    确保查询中的每个值都包含在单引号中。检查下面的问题代码的说明或修改。

    Customer.newUser = (customer) => {
      return db.then(function(conn){
        return conn.query(
          `INSERT INTO customers (FirstName, LastName, Age) VALUES 
          ('${customer.FirstName}', '${customer.LastName}', '${customer.Age}')`
        );
      })
    }
    

    【讨论】:

      猜你喜欢
      • 2018-03-08
      • 2015-12-22
      • 1970-01-01
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多