一尘不染

节点MySQL转义LIKE语句

node.js

如何在node-mysql中转义MySQL LIKE语句?

遵循以下原则

"SELECT * FROM card WHERE name LIKE '%" + connection.escape(req.body.search) + "%'"

结果是

'SELECT * FROM card WHERE name LIKE \'%\'hello\'%\''

这是语法错误。如果我使用的替代语法

connection.query("SELECT * FROM card WHERE name LIKE '%?%'", req.body.search, function () {});

导致类似的语法错误。我也尝试过

connection.query("SELECT * FROM card WHERE name LIKE ?", '%' + req.body.search + '%', function () {});

最终只是转义了’%’符号。


阅读 246

收藏
2020-07-07

共1个答案

一尘不染

不知道为什么%在上一个示例中转义了它,因为这对我来说很好:

// lifted from my code:
var value = 'ee20e966289cd7';
connection.query('SELECT * from django_session where session_key like ?', '%' + value + '%', ...)

// Result:
[ { session_key: '713ee20e966289cd71b936084a1e613e', ... } ]

当我在驱动程序中打开调试功能(debug:true作为参数传递给mysql.createConnection)时,它无法逃脱百分号:

{ command: 3,
  sql: 'SELECT * from django_session where session_key like \'%ee20e966289cd7%\'' }

(它 确实 转义了单引号,但这仅用于显示目的)

(使用mysql@2.0.0-alpha8

2020-07-07