2017-04-12 334 views
0
app.post('/like/:level/:name', function(req, res){ 
connection.query("SELECT * from books where " + req.params.level + " like '%" + req.params.name + "'%", function(err, rows, fields) { 
if (!err){ 
var row = rows; 
res.send(row); 
console.log(req.params); 
console.log('The solution is: ', rows);} 
else{ 
console.log('Error while performing Query.'); 
console.log(err);} 
}); 
}); 

基于上面的代码,有人可以帮我找到原因,为什么我不能使用LIKE语句启动查询?node.js mysql LIKE语句使用

错误显示为 {错误:ER_PARSE_ERROR:您的SQL语法错误;请检查与您的MariaDB服务器版本对应的手册,查看在第1行 上位于'%'附近的正确语法:Query.Sequence._packetToError(/root/Newfolder/node_modules/mysql/lib/protocol/sequences/Sequence.js: 52:14) 在Query.ErrorPacket(/root/Newfolder/node_modules/mysql/lib/protocol/sequences/Query.js:77:18) 在Protocol._parsePacket(/根/ Newfolder/node_modules/MySQL的/ LIB /协议/ Protocol.js:280:23) 在Parser.write(/root/Newfolder/node_modules/mysql/lib/protocol/Parser.js:75:12) 在Protocol.write(/根/ Newfolder/node_modules/mysql/lib/protocol/Protocol.js:39:16) 。 (/root/Newfolder/node_modules/mysql/lib/Connection.js:103:28) at emit.ene(events.js:96:13) at Socket.emit(events.js:188:7) at readableAddChunk( _stream_readable.js:176:18) 在Socket.Readable.push(_stream_readable.js:134:10)在Protocol._enqueue -------------------- (/ root/Newfolder/node_modules/mysql/lib /协议/协议.js:141:48)根/ Newfolder/trial.js:98:12在 Layer.handle [按handle_request](/root/Newfolder/node_modules/express/lib/router/layer.js:95:5) 在下一(/根/ Newfolder /node_modules/express/lib/router/route.js:137:13) at Route.d ispatch(/root/Newfolder/node_modules/express/lib/router/route.js:112:3) 在Layer.handle [按handle_request](/root/Newfolder/node_modules/express/lib/router/layer.js: 95:5) 在/root/Newfolder/node_modules/express/lib/router/index.js:281:22 在PARAM(/root/Newfolder/node_modules/express/lib/router/index.js:354:14 ) 在PARAM(/root/Newfolder/node_modules/express/lib/router/index.js:365:14) 代码: 'ER_PARSE_ERROR', 错误号:1064, SQLSTATE: '42000', 指数:0}

+1

你得到的实际错误是什么? (console.log(err);'show是什么?)另外,请立即阅读[this xkcd](https://xkcd.com/327/)。 – nnnnnn

+0

另外我不想逃避或类似的东西。我只想让查询返回某些东西,比如当我输入/标题/ a时,它会给我以a开头的所有数据作为标题。 – raymond017

+0

这只是一个简单的查询,因为我不是试图将它链接到外部只是一个初学者的小项目 – raymond017

回答

0

您的查询字符串中的单引号错误。更改此:

" like '%" + req.params.name + "'%" 

...这样的:

" like '%" + req.params.name + "%'" 

...所以第二百分号是单引号内。

如果你想要做做一个“打头的”搜索作为在评论中提到,从您的字段值的开头删除'%'

" like '" + req.params.name + "'%" 

最后,不是你问什么,但你shouldn't directly concatenate user input into an SQL query

+0

感谢实际上工作! – raymond017

+0

这是否意味着逃避查询输入? – raymond017

+0

阅读我链接到的页面(它有链接到更多文章)的背景。然后[这个StackOverflow问题](http://stackoverflow.com/questions/41742200/how-can-i-prevent-sql-injection-with-node-js)涵盖了Node.js中的SQL注入。 – nnnnnn