javascript - 填充 many - many 不会填充,并且不会引发错误
问题描述
我的数据库如下所示:
表:公会 -> guild_id、guild_name、guild_owner、guild_owner_id、guild_member_count、guild_prefix。
表:成员 -> member_id、member_name、member_disc
表:公会成员 -> guild_id、member_id、warning_points、chat_points
Discord 中的值也是如此guild_id
,并且member_id
都是 PK 值。我的目标是专门将每个成员与一个公会联系起来,添加warning_points
和chat_points
。
我可以同时填充Guilds
表格和Members
表格,但是,它不会Guildmembers
使用相关数据自动填充表格。
在尝试使用此代码填充表时:
let guiMemSQL = 'INSERT INTO Guildmembers(guild_id, member_id) SELECT Guilds.guild_id, Members.member_id FROM Guilds INNER JOIN Members ON Guilds.guild_id = Members.member_id'
con.query(guiMemSQL, (err, result) => {
if(err){ throw err }
console.log(`Updated GuildMembers Table`);
})
我没有错误。该表也不填充。所以要么我的代码/逻辑有缺陷,要么我不明白我在做什么。
我试图获得的信息是guild_id
and member_id
,它们是BIGINT
s。
解决方案
mysql 不会自动填充多对多表,您必须INSERT
像任何其他表一样输入值。我这样做的方法是使用以下代码:
// Update GuildMembers Table
let guiID = MemberInfo.userGuildID;
const memGuiID = BigInt(guiID); // Convert String to Number
const updGMT = {guild_id: memGuiID, member_id: memIdNo };
let guiMemSQL = 'INSERT INTO Guildmembers SET ?';
con.query(guiMemSQL, updGMT, (err, result) => {
if(err){ throw err }
console.log(`Updated GuildMembers Table`);
})
这里参数化查询的用例虽然不是特定问题,但对于帮助抵御sql injection
攻击风险很重要。并且会被视为很好的做法。
如果有人知道让字段自动填充的方法,请分享!
目前我将留下我为解决这个问题所做的工作,以防其他人有类似的问题。
推荐阅读
- winapi - 控制面板小程序执行命令行语法
- android - 从 Flow 接收对象后,如何在挂起函数中返回对象?
- c# - 是否可以从 DataGrid 访问 DataGridRow?
- .net - 在 Visual Studio 2019 中,如何检测构建配置更改?
- autodesk-forge - 如何为 Autodesk Forge App 指定多个回调 URL?
- html - 在网站上实现 Chrome DevTool 设备模式
- c# - SpecRun 在通过 CLI 运行测试时不运行任何测试
- xml - 解析 xml 并生成文档而不会丢失换行符
- lua - 为什么需要将栈底创建的大字符串保存在 Lua 字符串缓冲区中
- excel - 单击按钮后添加行