首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何避免撇号来匹配Node.js/Discord.js中的MySQL数据库中的数据?

如何避免撇号来匹配Node.js/Discord.js中的MySQL数据库中的数据?
EN

Stack Overflow用户
提问于 2019-07-01 11:59:23
回答 1查看 539关注 0票数 0

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

我有张桌子上有一张卡片的清单。在命令的顶部,查询将每个卡片名作为“主列表”推入数组中。在代码的后面,我让用户提供他们想要添加到他们的甲板上的卡名。为了检查他们是否使用的卡片,与拼写完全一样,它取下用户提供的每个卡名,并试图在主列表数组中找到它。

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

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

下面是我的代码:

代码语言:javascript
代码运行次数:0
运行
复制
con.query(`SELECT * FROM cardsmaster`, (error, rows, fields) => {
    let cardsList = []
    for (var i in rows) {
        cardsList.push(rows[i].name)
    }
});

下面是如何在Drago's Fury表中列出MySQL:

这就是我现在使用的方法,当它在用户不和谐的内部提供时,尝试并使它找到Drago's Fury

代码语言:javascript
代码运行次数:0
运行
复制
cardsToAdd = cardsToAdd.content.replace(/'/gi, "\'");

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

但是我收到了这个错误:

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

所以,我试过:

代码语言:javascript
代码运行次数:0
运行
复制
cardsToAdd = cardsToAdd.content.replace(/'/gi, "\\'");

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

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

代码语言:javascript
代码运行次数:0
运行
复制
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])
    }
}

如何才能始终匹配主列表中提供的名称?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-01 15:39:10

正如注释中解释的那样,通过使用占位符(?),输入将自动为您转义;node-mysql驱动程序为它们自己使用mysql.escape()。这将防止注入和当前错误,而不必自己做任何事情。您的撇号不会触发相同的错误,因为它是从字面上读取的,而不是语句的一部分。

示例用法:

代码语言:javascript
代码运行次数:0
运行
复制
const name = "Drago's Fury";

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

  console.log(rows);
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56835305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档