J'ai du code Node.js qui tente de mettre à jour une base de données de la manière suivante:
connection.query(command, function(err,rows) {
if (err){
console.log(command);
console.log("ERROR");
console.log(err);
return;
}
console.log("good");
});
Ce qui précède est exécuté à plusieurs reprises pour différentes valeurs de "commande", générant ainsi différentes requêtes dans la base de données. Le problème est que lorsqu'il y a une erreur, la requête incorrecte est imprimée dans console.log(command)
. En effet, l'heure à laquelle la requête est ajoutée à la file d'attente et l'heure à laquelle la requête est réellement exécutée ne sont pas identiques. La valeur de "commande" n'est donc pas la même pour chacun de ces moments. Y a-t-il un moyen de contourner ceci?
Remarque: console.log(err)
affiche l'erreur elle-même, ainsi qu'une partie de la requête, mais uniquement la ligne où l'erreur s'est produite. Je veux imprimer la requête entière.
Conformément à docs , vous pouvez utiliser query.sql
pour obtenir la requête exécutée.
var post = {id: 1, title: 'Hello MySQL'};
var query = connection.query('INSERT INTO posts SET ?', post, function(err, result) {
// Neat!
});
console.log(query.sql); // INSERT INTO posts SET `id` = 1, `title` = 'Hello MySQL'
Dans ce cas, ce sera
connection.query(command, function (err, rows) {
if (err) {
console.log('this.sql', this.sql); //command/query
console.log(command);
console.log("ERROR");
console.log(err);
return;
}
console.log("good");
});
Si @Sridhar answer ne fonctionne pas pour vous, probablement parce que vous utilisez une API de promesse qui ne renvoie pas encore la requête SQL , vous pouvez utiliser:
const sql = connection.format("SELECT * FROM table WHERE foo = ?", ["bar"]);
console.log(sql);
const [rows] = await connection.query(sql);
Documentation: https://github.com/mysqljs/mysql#preparing-queries