【发布时间】:2018-09-16 19:52:50
【问题描述】:
鉴于以下情况:
let sql: any = 'SELECT * FROM test_people ORDER BY :column :direction LIMIT :limit, :offset';
let binds: any = { column: 'name', direction: 'desc', limit: '1', offset: '10' };
let result = await mysql.query(sql, binds);
无论出于何种原因,它都会引发 mysql 语法错误,如果我替换绑定并在没有绑定的情况下将其硬编码,则查询实际上可以工作并获取结果。不知道这里有什么问题。帮助 ! :)
顺便说一句,我也尝试过问号版本,得到相同的语法错误。
错误输出:
...
code: 'ER_PARSE_ERROR',
errno: 1064,
'You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near \':column :direction LIMIT :limit, :offset\' at line 1',
...
欣赏任何解决方案,
【问题讨论】:
-
看起来它需要传递一个数组,如下所示: let result = await mysql.query(sql, [ binds ]);
-
我知道这个问题是关于一种完全不同的语言,但我敢打赌原因是一样的:stackoverflow.com/questions/182287/… 参数绑定用于将数据与查询分离,而不是用于构建动态查询.
-
@DZDomi 所以我已经用数组版本和问号试过了,没用。得到相同的语法错误
-
请记住在这样的问题中包含 exact 错误消息:即使它对您没有多大意义,它可能会帮助某人发现问题并帮助您。
-
@IMSoP 你是对的。我用更多细节更新了我的问题。顺便说一句,我记得 PHP 有同样的问题,但我解决了,节点库必须有类似的方法来解决这个问题。我会看看你发给我的东西。谢谢!
标签: mysql node.js typescript