J'utilise Node.js et le module mysql mais je n'arrive pas récupérer les données que MySQL renvoi avec la fonction query :/
Avez-vous une solution pour récupérer efficacement le tableau de données (la requête renvoie bien les données mais je n'arrive pas à les sortir de query),
Voici la fonction que j'utilise pour lire :
/**
* lit les données de la database db selon la requête request
* @param {Request} request la requête de sléction fourni à MySQL
*/
sql_read_data(request){
let sql_request = `SELECT ${request.target} FROM ${request.table} ${(request.conditions != null)? 'WHERE ' + request.conditions : ''}`;
var result_return;
this.mysql_db.query(sql_request,(err, rows, fields) => {
if(err) {
throw err;
}
result_return = rows;
});
return result_return;
}
Bonjour ta donnée result_return seras tonjour undefined lorsque tu sortiras de la fonction sql_read_data parceque tu l'as affecté dans un callback qui lui s'executéra après que ta fonction initial et rendu ça valeur pour illustré:
sql_read_data( request ) {
// ordre éxecution
// 1. déclare une var et l'affect
let sql_request = `SELECT ${request.target} FROM
${request.table} ${(request.conditions != null)? 'WHERE ' + request.conditions : ''}`;
// 2 declare une var sans l'affect ( contient undefined )
var result_return;
// 3 execute la method query en lui passant 2 paramètre une chaîne de texte et une fonction
this.mysql_db.query(
// chaîne de texte passé en argument
sql_request,
// fonction passé en argument
// que la méthode query executera quand la requête seras terminé
(err, rows, fields) => {
// 5 . la requête sql c'est terminé et la méthode query execute ta fonction uniquement maintenant
// mais tu à déjà retourné la valeur de la fonction sql_read_data
if(err) {
throw err;
}
// 6. affectation inutile
result_return = rows;
}
);
// 4 . return la var result_return ( undefined ) et sort de la fonction sql_read_data
return result_return;
}
une façon de résoudre pourrait être par exemple ( il en existe bien d'autre et je t'invite à cherché la plus adapté à ton projet ) ,
// la ou callback devrait être une fonction
sql_read_data( request , callback ) {
// ordre éxecution
// 1. déclare une var et l'affect
let sql_request = `SELECT ${request.target} FROM
${request.table} ${(request.conditions != null)? 'WHERE ' + request.conditions : ''}`;
// 2 declare une var sans l'affect ( contient undefined )
var result_return;
// 3 execute la method query en lui passant 2 paramètre une chaîne de texte et une fonction
this.mysql_db.query(
// chaîne de texte passé en argument
sql_request,
// fonction passé en argument
// que la méthode query executera quand la requête seras terminé
(err, rows, fields) => {
// 5 . la requête sql c'est terminé et la méthode query execute ta fonction maintenant
if(err) {
throw err;
}
// 6. execute la fonction de rappel que tu as reçoit en paramètre
// en lui passant les données SQL reçut
callback( rows ) ;
}
);
}
SamuelGaborieau3 a écrit:
> une façon de résoudre pourrait être par exemple ( il en existe bien d'autre et je t'invite à cherché la plus adapté à ton projet ) ,
J'aimerais bien les connaître parce que je l'ai trouve pas :/. Et la solution que tu m'as proposer ne fait que déplacer le problème. la fonction callback serait elle aussi appelé après la fonction sql_read_data, donc c'est toujours le même problème qu'avec le retrun_result :/. Si tu as une solution clé en main (je m'en fou comment elle est t'en qu'elle fonctionne ^^). Moi je veux juste que ma fonction sql_read_data me retourne le tableau que la query à obtenu.
Récupérer les données de MySQL
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
suggestion de présentation.