节点MySQL转义LIKE语句

dts*_*tsn 25 javascript mysql node.js node-mysql

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

有点像

"SELECT * FROM card WHERE name LIKE '%" + connection.escape(req.body.search) + "%'"
Run Code Online (Sandbox Code Playgroud)

结果是

'SELECT * FROM card WHERE name LIKE \'%\'hello\'%\''
Run Code Online (Sandbox Code Playgroud)

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

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

导致类似的语法错误.我也试过了

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

这最终会逃脱'%'的标志.

rob*_*lep 29

不知道为什么它%在你的上一个例子中逃脱了,因为这对我来说很好:

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

// Result:
[ { session_key: '713ee20e966289cd71b936084a1e613e', ... } ]
Run Code Online (Sandbox Code Playgroud)

当我打开驱动程序中的调试(debug:true作为参数传递mysql.createConnection)时,它不会转义百分号:

{ command: 3,
  sql: 'SELECT * from django_session where session_key like \'%ee20e966289cd7%\'' }
Run Code Online (Sandbox Code Playgroud)

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

(使用mysql@2.0.0-alpha8)


小智 12

我已经取得了类似的成功

"SELECT * FROM card WHERE name LIKE " + connection.escape('%'+req.body.search+'%')
Run Code Online (Sandbox Code Playgroud)


Luk*_*rus 5

怎么样

mysql.format("SELECT * FROM card WHERE name LIKE CONCAT('%', ?,  '%')", req.body.search)
Run Code Online (Sandbox Code Playgroud)

?