Knex和SQL数据库的引号问题

时间:2018-11-08 07:56:51

标签: javascript node.js knex.js

我正在尝试使用Knex将查询保存到数据库。但是,如果我要保存的查询包含引号,则会出现错误。

以下是代码的示例:

db.query(`INSERT INTO test.searches VALUES ('TestUser', 'testqueryname', ''SELECT * FROM table WHERE team='rocket'')`, info, () =>{}

当然,在实际情况下,我不是发送硬编码的值,而是将变量作为字符串发送。

尝试保存此错误会提示我

  

错误:“火箭”处或附近的语法错误

2 个答案:

答案 0 :(得分:0)

如果您正在运行MySQL,则需要slash escape quotation marks

db.query(`INSERT INTO test.searches VALUES ('TestUser', 'testqueryname', 'SELECT * FROM table WHERE team=\'rocket\'')`, info, () =>{}

如果您正在运行PostgreSQL,则需要double escape quotation marks

db.query(`INSERT INTO test.searches VALUES ('TestUser', 'testqueryname', 'SELECT * FROM table WHERE team=''rocket''')`, info, () =>{}

请考虑使用parameterised SQL queries或至少适当地转义输入以避免SQL注入攻击。

答案 1 :(得分:0)

首先,您的代码似乎具有javascript语法错误,至少缺少右括号。

第二,knex没有.query()方法(也许您正在直接使用数据库驱动程序?)。即使上面的查询可以使用常规的knex.raw()方法轻松编写,您也应该使用knex

如果您使用的是knex.raw,则可以使用??替换和?进行值绑定。

如果像问题中那样编写代码,则使用knex根本没有优势,而应该直接使用数据库驱动程序。