2017-04-12 333 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