前提・実現したいこと
######前提
Node.js + MySQLでconnection.query(?を含むsql文,[],(error,results))を用いてクエリを実行したい。
しかし、?に代入する値がシングルクォーテーションで囲まれるためか、想定しているsql文でクエリを実行できない。
実現したいこと
connection.query(?を含むsql文,[],(error,results))を用いてクエリを実行したい。
######ご教示頂きたいこと
- connection.query(?を含むsql文,[],(error,results))の第2引数代入の際に、シングルクォーテーションで囲まれる原因と解決方法。
- 想定通りのクエリが実行できない原因が代入の際のシングルクォーテーションでない場合、問題の発生原因と解決方法。
環境
OS Windows10
Node.js v12.16.3
mySQL Ver 8.0.20 for Win64 on x86_64
ソースコード
js
1app.post('/foodsearch',(req,res)=>{ 2 const sql = 'SELECT food_name FROM foods WHERE food_name like "%?%"'; 3 const query = connection.query(sql,[req.body.SearchFood],(error,results) => { 4 console.log(req.body.SearchFood); 5 console.log(query.sql); 6 res.render('searchResult.ejs',{foods: results, word: req.body.SearchFood}) 7 }); 8});
試したこと
req.body.SearchFood値及び、sql文の確認
上記のコードを用い、formに「パウチ」と入力した際の各値を確認。
1行目のreq.body.SearchFood値に問題は無いが、2行目のsql文の代入した文字列の前後にシングルクォーテーションが存在している。
console
1パウチ 2SELECT food_name FROM foods WHERE food_name like "%'パウチ'%"
sql文のシングルクォーテーションの除去
以下の様にシングルクォーテーションを除去することで、想定通りのクエリが実行できることを確認しております。
しかしこの様な動かし方は限界があると思いますので、解決方法をご教示頂きたいと考えております。
js
1app.post('/foodsearch',(req,res)=>{ 2 const word = '"%' + req.body.SearchFood + '%"' 3 let sql = 'SELECT food_name FROM foods WHERE food_name like '+ word; 4 sql = sql.replace(/'/g, ''); // 検索文字のシングルクォーテーション除去 5 const query = connection.query(sql,(error,results) => { 6 res.render('searchResult.ejs',{foods: results, word: req.body.SearchFood}) 7 }); 8});
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/06 04:16