大家好,
想請問大家一個問題,
當我想一次新增多筆資料進資料庫時,
SQL語法是INSERT INTO tableName(name,age) VALUES ("p1",18),("p2",10)
本來是希望資料庫能返回 RowDataPacket 的資料,
那我就可以使用JSON.parse(JSON.stringify(results)
,
將返回的資料轉成能用的JSON檔: [{name:"p1",age:18},{name:"p2",age:10}]
。
結果返回的值不是RowDataPacket,而是OkPacket。
我該怎麼取出返回值呢?
我的環境是 Nodejs + MySQL。
以下是我的code。
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'graphql'
})
let query = `INSERT INTO ${tableName}(${tableStructure}) VALUES ${result}`
connection.query(query, (error, results, fields) => {
if (error) throw error
console.log(results) //這個
//resolve(JSON.parse(JSON.stringify(results)))
})
想再請問一個問題,
只有查詢才會返回RowDataPacket,
而其他修改(insert,update,delete)皆會返回OkPacket嗎?
-------更新--------
我是用海綿大大提到的內建套件 const mysql = require('mysql')
剛剛測試一下,只有查詢會返回RowDataPacket,才能獲取資料。
其他的動作,如insert,update,delete,drop,truncate,都是返回OkPacket。
根據這篇的說法
要用Sequelize
insert 一筆大概像這樣
sequelize.sync().then(() => {
console.log('Book table created successfully!');
Book.create({
title: "Clean Code",
author: "Robert Cecil Martin",
release_date: "2021-12-14",
subject: 3
}).then(res => {
console.log(res)
}).catch((error) => {
console.error('Failed to create a new record : ', error);
});
}).catch((error) => {
console.error('Unable to create table : ', error);
});
回傳大概像這樣
books {
dataValues:
{ id: 1,
title: 'Clean Code',
author: 'Robert Cecil Martin',
release_date: '2021-12-14',
subject: 3,
updatedAt: 2021-12-14T10:12:16.644Z,
...
}
接著再看著辦...
你所提到的INSERT、UPDATE、DELETE等語句通常會返回OkPacket,而非RowDataPacket。
如果你想取出返回的OkPacket的資訊,可以使用以下方法:
connection.query(query, (error, results, fields) => {
if (error) throw error
console.log(results.affectedRows) // 返回受影響的行數
console.log(results.insertId) // 返回新增資料的ID
console.log(results.warningStatus) // 返回警告狀態
})
請注意,results是一個對象,而非數組。因此,你無法使用JSON.parse(JSON.stringify(results))將它轉換為JSON。
如果你想要使用JSON.parse(JSON.stringify(results))將結果轉換為JSON,你需要在執行查詢時使用SELECT語句,這樣才會返回RowDataPacket。
例如:
connection.query('SELECT * FROM tableName', (error, results, fields) => {
if (error) throw error
console.log(JSON.parse(JSON.stringify(results))) // 返回結果的JSON
})