J'ai une simple requête d'insertion qui ressemble à ça:
let sql = "INSERT into users(name, date) VALUES ('"+name+"', '"+date+"')"; connection.query(sql, (err, result) => { if(err) { res.status(500); } else { res.send(result) // we have here an object that has only the inserted id } });
ce que je veux vraiment, c'est obtenir les données de ligne insérées, pas seulement l'identifiant sans faire une autre requête de sélection pour les obtenir.
existe-t-il un moyen de faire en sorte que cela se produise en une seule requête?
3 Réponses :
Si vous utilisez:
// include mysql module var mysql = require('mysql');
Le module mysql
ne retournera pas de données sur la requête de l'insert. Il revient:
Number of rows affected
, Number of records affected with the warning
, Message
Si vous souhaitez obtenir les données que vous avez insérées, vous devez utiliser un générateur de requêtes ou un ORM comme Sequelize. entrez la description du lien ici
Vous pouvez l'utiliser pour récupérer le
let sql = "INSERT into users(name, date) VALUES ('"+name+"', '"+date+"') ; SELECT * FROM users WHERE id = SCOPE_IDENTITY()"; connection.query(sql, (err, result) => { if(err) { res.status(500); } else { res.send(result) // we have here an object that has only the inserted id } });
SCOPE_IDENTITY () Retourne la dernière valeur d'identité insérée
Vous pouvez obtenir le dernier identifiant inséré en utilisant le code ci-dessous:
SQLconnnection.query(sql, (err, result) => { if(err) { console.error(err); } else { console.log(result) ; /*Output=>{affectedRows: 1 changedRows: 0 fieldCount: 0 insertId: 1 =>Last inserted ID Here message: "" protocol41: true serverStatus: 2 warningCount: 0}*/ console.log(result.insertId);//=>last inserted id get } });
mysql
renvoie pas de données lors de l'insertion. Vous pouvez utiliser un générateur de requêtes ou un ORM knexjs.org/#Builder-returning