gpt4 book ai didi

mysql - 如何转义撇号以匹配 Node.js/Discord.js 中 MySQL 数据库的数据?

转载 作者:行者123 更新时间:2023-11-29 15:49:41 25 4
gpt4 key购买 nike

我知道转义一般是如何工作的,但在这种情况下,我无法让它给我想要的结果。

我有一张 table ,里面有卡片列表。在命令的顶部,我将查询将每个卡名称作为“主列表”推送到数组中。稍后在代码中,我让用户提供他们想要添加到牌组中的卡牌名称。为了检查他们使用的卡片是否存在且拼写完全一致,它会获取用户提供的每个卡片名称并尝试在主列表数组中找到它。

但是,当用户提供带有撇号的卡牌名称(即 Drago's Fury)时,它拒绝在列表中查找该卡牌名称。

我尝试将所有出现的 ' 替换为 \''' 以及两者的几种组合,多个 \' 和多个不同数量的 ' 。似乎没有什么能让我与之匹配。表中的 Drago's Fury 确实按预期包含名称中的 ',因为我能够通过使用 \'< 转义它来将其放入表中.

这是我的代码:

con.query(`SELECT * FROM cardsmaster`, (error, rows, fields) => {
let cardsList = []
for (var i in rows) {
cardsList.push(rows[i].name)
}
});

以下是 Drago's Fury 在 MySQL 表中的列出方式:
MySQL Table

这就是我现在正在使用的方法,当用户在 Discord 中提供Drago's Fury时,尝试转义它并使其找到它:

cardsToAdd = cardsToAdd.content.replace(/'/gi, "\'");

这是cardsToAdd在替换后记录Drago's Fury时的显示方式:

Console

但随后我收到此错误:

Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Fury, Fierce Boost, Fierce Boost, Fiery Rage, Fire Boost, Fire Boost, Magma Bo' at line 1

所以,我尝试了:

cardsToAdd = cardsToAdd.content.replace(/'/gi, "\\'");

我认为第一个 \ 会转义第二个 \ 和撇号,但这并不是我想要的。传入的值是相同的,只是它有双引号而不是单引号,所以我不确定这是否导致问题......

这是尝试获取用户提供的内容并在主列表中找到它的部分:

let usercardnamearray = cardsToAdd.split(", ")

let matchedcards = []
let unmatchedcards = []

for (let i = 0; i < usercardnamearray.length; i++) {

console.log(usercardnamearray[i])

let found = cardsList.indexOf(`${usercardnamearray[i]}`)
console.log(found)

if (found >= 0) {
matchedcards.push(usercardnamearray[i])
} else if (found == -1){
unmatchedcards.push(usercardnamearray[i])
}
}

如何才能一致地匹配主列表中提供的名称?

最佳答案

正如评论中所解释的,通过使用占位符(?),输入会自动为您转义; node-mysql驱动程序自行使用 mysql.escape() 。这将防止注入(inject)和您当前的错误,而您无需自己执行任何其他操作。您的撇号不会触发相同的错误,因为它是按字面意思读取的,而不是作为语句的一部分。

使用示例:

const name = "Drago's Fury";

con.query("SELECT * FROM cardmaster WHERE name = ?", [name], (err, rows) => {
if (err) return console.error(err);

console.log(rows);
})

关于mysql - 如何转义撇号以匹配 Node.js/Discord.js 中 MySQL 数据库的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56835305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com