node - npm-mssql - es6 - כיצד לבצע שאילתא עם משתנים
-
אני משתמש בחבילת mssql
ע"מ להמנע מהזרקות sql
אני משתמש באפשרות המובנת של es6אני מעוניין לבצע שאילתא שסעיף ה
selectקבוע
והwhereמשתנה לפי req.queryהבעיה היא
- שכתוב שם
Column names cannot be passed/set in statements using variables. - שאני בכ"ז רוצה לכתוב את הselect רק פעם אחת
דוגמא:
router.get('/all_users', (req, res) => { let ids = req.query; if (ids) { const idList = ids.split(',').map(id => `'${id.trim()}'`).join(','); ids = ` and id_user in (${idList})`; } sql.connect(Config).then(pool => { return pool.request().query` select * from users where active = 1 ${ids}`; }).then(result => { res.send(result.recordset); }).catch(err => { console.error(err); res.status(500).send(err.message); }); }); - שכתוב שם
-
במקרה כזה אתה חייב להשתמש בפרמטרים במפורש (שזה הדרך הרגילה טרום הES6 Tag Function)
router.get('/all_users', (req, res) => { const sql = "select * from users where active = 1" sql.connect(Config).then(pool => { const request = pool.request(); if(req.query){ request.input('idList', sql.VarChar, req.query.split(',').map(id => Number(id)).join(',')); sql += "and id_user in (@idList)"; } return request.query(sql); }).then(result => { res.send(result.recordset); }).catch(err => { console.error(err); res.status(500).send(err.message); }); });הTrim שעשית מיותר כי ברשימת in מותר שיהיו רווחים.
מאידך שמתי Number שמוודא שמדובר במספר, הוא על הדרך גם עושה Trim שהרי הוא מביא מספר גם למספר עם רווחים.
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות