我正在尝试使用Knex将查询保存到数据库。但是,如果我要保存的查询包含引号,则会出现错误。
以下是代码的示例:
db.query(`INSERT INTO test.searches VALUES ('TestUser', 'testqueryname', ''SELECT * FROM table WHERE team='rocket'')`, info, () =>{}
当然,在实际情况下,我不是发送硬编码的值,而是将变量作为字符串发送。
尝试保存此错误会提示我
错误:“火箭”处或附近的语法错误
答案 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
根本没有优势,而应该直接使用数据库驱动程序。