Node.js連線MySQL插入表資料

2019-10-18 00:54:39

在本教學中,您將學習如何從node.js應用程式將一行或多行插入到表中。

要在表中插入新行,請按照下列步驟操作:

  1. 連線到MySQL資料庫,參閱:/25/13447.html
  2. 通過在connection物件上呼叫query()方法來執行INSERT語句。
  3. 關閉資料庫連線。

請注意,我們將重用包含MySQL資料庫資訊的config.js模組。

如果您沒有從上一個教學開始,那麼可以參考這裡的config.js模組:

let config = {
  host    : 'localhost',
  user    : 'root',
  password: '123456',
  database: 'todoapp'
};

module.exports = config;

將一行資料插入表中

以下insert.js程式將向todos表中插入一個新行:

let mysql  = require('mysql');
let config = require('./config.js');
let connection = mysql.createConnection(config);

// insert statment
let sql = `INSERT INTO todos(title,completed)
           VALUES('Learn how to insert a new row',true)`;

// execute the insert statment
connection.query(sql);

connection.end();

下面,我們來執行insert.js程式。

F:\worksp\mysql\nodejs\nodejs-connect>node insert.js
openssl config failed: error:02001003:system library:fopen:No such process

並檢查todos表中的資料:

mysql> select * from todos;
+----+-------------------------------+-----------+
| id | title                         | completed |
+----+-------------------------------+-----------+
|  1 | Learn how to insert a new row |         1 |
+----+-------------------------------+-----------+
1 row in set (0.00 sec)

在上面查詢結果中,您可以看到,程式向todos表中插入一個新行。

插入一行並返回插入的ID

以下insert-lastid.js程式將一個新行插入到todos表中,並返回插入的id

let mysql = require('mysql');
let config = require('./config.js');
let connection = mysql.createConnection(config);

let stmt = `INSERT INTO todos(title,completed)
            VALUES(?,?)`;
let todo = ['Insert a new row with placeholders', false];

// execute the insert statment
connection.query(stmt, todo, (err, results, fields) => {
  if (err) {
    return console.error(err.message);
  }
  // get inserted id
  console.log('Todo Id:' + results.insertId);
});

connection.end();

要將資料傳遞給SQL語句,請使用問號(?)作為預留位置。

在這個例子中,我們分別使用兩個問號(??)作為titlecompleted欄位。

執行查詢後,可以從results物件的insertId屬性中獲取插入的id,如下所示 -

F:\worksp\mysql\nodejs\nodejs-connect>node insert-lastid.js
openssl config failed: error:02001003:system library:fopen:No such process
Todo Id:2

一次插入多行

以下insert-more.js程式一次將多行插入到todos表中:

let mysql = require('mysql');
let config = require('./config.js');

let connection = mysql.createConnection(config);

// insert statment
let stmt = `INSERT INTO todos(title,completed)  VALUES ?  `;
let todos = [
  ['Insert multiple rows at a time', false],
  ['現在學習一次插入多行記錄(by www.tw511.com)', true],
  ['It should work perfectly', true]
];

// execute the insert statment
connection.query(stmt, [todos], (err, results, fields) => {
  if (err) {
    return console.error(err.message);
  }
  // get inserted rows
  console.log('Row inserted:' + results.affectedRows);
});

// close the database connection
connection.end();

請注意,我們在INSERT語句中只使用一個問號(?),多行資料是陣列陣列。

您可以存取通過results物件的affectedRows屬性插入的行數。

F:\worksp\mysql\nodejs\nodejs-connect>node insert-more.js
openssl config failed: error:02001003:system library:fopen:No such process
Row inserted:3

如結果所示,插入了三行,這是像我們預期的那樣。

在本教學中,您已經學習了如何從node.js程式將一行或多行插入到表中。