J'essaye d'utiliser des remplacements avec la requête sequelize.literal ().
original: { Error: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '? and `Follows`.status=?)' at line 1
Mais cela renvoie l'erreur suivante
router.get('/posts/testapik', function(req, res) { const user_id = req.session.user_id; const status ="accept" Posts.findAll({include:[{ model: Likes},{ model: Comments},{ model: Users}], where:{user_id:{[Op.in]:[sequelize.literal('SELECT `Follows`.receiver_id FROM `follows` AS `Follows` WHERE `Follows`.user_id=? and `Follows`.status=?',{ replacements: [user_id,status], type: sequelize.QueryTypes.SELECT })]}} }) .then(users => { res.send(users); }) });
3 Réponses :
Cela fonctionne ... J'ai utilisé ce user_id = '+ user_id +'
router.get('/posts/testapik', function(req, res) { const user_id = req.session.user_id; const status ="accept" Posts.findAll({include:[{ model: Likes},{ model: Comments},{ model: Users}], where:{user_id:{[Op.in]:[sequelize.literal('(SELECT `Follows`.receiver_id FROM `follows` AS `Follows` WHERE `Follows`.user_id='+user_id+' and `Follows`.status="accept")')]}} }) .then(users => { console.log("Posts data Testing =>",users); res.send(users); }) .catch((err)=> { console.error(err) res.status(501) .send({ error : "error..... check console log" }) }) });
Cela peut être dangereux car user_id n'est pas protégé et peut conduire à des injections SQL.
Pour les remplacements sur une requête brute, vous devez écrire le nom de la variable à l'intérieur de la requête avec ce format :userIdReplacement
.
const query = '(SELECT `Follows`.receiver_id FROM `follows` AS `Follows` WHERE `Follows`.user_id= :userIdReplacement and `Follows`.status="accept")'; db.sequelize.query(query, { replacements: { userIdReplacement : user_id }});
Si vous avez plus d'un remplacement, placez-le simplement dans l'objet de remplacement, séparez-le par des virgules.
Pour les remplacements, vous devez définir la propriété remplacements dans l'objet de requête.
router.get('/posts/testapik', function(req, res) { const user_id = req.session.user_id; const status ="accept" Posts.findAll({ include:[{ model: Likes},{ model: Comments},{ model: Users}], replacements: [user_id,status], where:{user_id:{[Op.in]:[sequelize.literal('SELECT `Follows`.receiver_id FROM `follows` AS `Follows` WHERE `Follows`.user_id=? and `Follows`.status=?')]}} }) .then(users => { res.send(users); }) });```