probleme requete

probleme requete

par John Puagnol,
Nombre de réponses : 6

Bonjour, 

J'utilise cette requête pour récupérer une valeur dans ma base de donnée : 

select mdl_enrol.id  from mdl_enrol, mdl_course where courseid = mdl_course.id and enrol='manual' and mdl_course.shortname='S4IN206'


Cela fonctionne parfaitement avec phpMyAdmin mais quand j'ai voulu l'adapter à mon plugin moodle j'ai une erreur : Erreur de lecture de la base de données

Voici mon code : 

 $idCours = "SELECT {enrol}.id FROM {enrol}, {course}  WHERE {enrol}.enrol = 'manual' AND {enrol}.courseid = {course}.id AND {course}.shortname = 'S4IN206'";

$idCours2 = $DB->get_record_sql($idCours);

echo $idCours2;


Et dans mon plugin, j'ai d'autre requête qui fonctionne bien. Je ne vois pas d'où vient le problème pour celui la.


Si quelqu'un pourrait m'aider svp , je lui serais très reconnaissant 


Merci d'avance;


Moyenne des évaluations  -
En réponse à John Puagnol

Re: probleme requete

par Patrick Lemaire,
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour John,

De mémoire, lorsque je me suis fait avoir, c'était parce que je n'avais pas déclaré :

 global $DB;

A bientôt,
Patrick

En réponse à Patrick Lemaire

Re: probleme requete

par John Puagnol,
Bonjour, 


Cette variable est bien présente tout en haut dans mon code. Je n'arrive tjr pas comprend qu'est-ce qui pose problème. 


Je vous remercie quand même pour la proposition. sourire 

En réponse à John Puagnol

Re: probleme requete

par Sébastien Mehr,
Avatar Développeurs Avatar Testeurs

Bonjour,

Il faudrait que vous passiez en paramètre dans un tableau les valeurs "en dur" de votre requête à la fonction get_record_sql().

Vous avez un exemple ici : https://docs.moodle.org/dev/Data_manipulation_API#moodle_database::get_records_sql.28.29

La requête donnerait quelque chose comme (pas testé) :

$idcours = $DB->get_record_sql('SELECT {enrol}.id 
FROM {enrol}, {course}
WHERE {enrol}.enrol = ? AND {enrol}.courseid = {course}.id
AND {course}.shortname = ?',
array( 'manual' , 'S4IN206')
);


Seb

En réponse à Sébastien Mehr

Re: probleme requete

par John Puagnol,

Bonjour,  

Merci pour votre réponse. J'ai essayer cette requête et j'ai toujours le même résultat : j'avais un message d'erreur : Erreur de programmation détectée. Ceci doit être corrigé par un programmeur : PHP catchable fatal error

Et en cherchant un peu, J'ai modifier votre requête  en rajoutant un 's' à record :

$idcours = $DB->get_records_sql('SELECT {enrol}.id 

                                FROM {enrol}, {course}

                                WHERE {enrol}.enrol = ?

                                AND {enrol}.courseid = {course}.id

                                AND {course}.shortname = ?',

                                array( 'manual' , 'S4IN206')

                              );  

Et maintenant j'ai un résultat mais celui-ci est : Array et en faisant un :

print_r($idcours);

j'ai ce resultat : 


J'ai voulu faire ceci ensuite pour n'avoir que la valeur 1 de l'id dans une variable :

$idcours1 = $idcours->id;

echo $idcours1;

Mais en faisant ceci, je n'ai plus rien. 

En réponse à John Puagnol

Re: probleme requete

par Sébastien Mehr,
Avatar Développeurs Avatar Testeurs

Bonjour,

Le résultat d'une requête traitée par la fonction get_records_sql(), vous retourne un tableau à deux dimensions dont le deuxième élément est un objet contenant les valeurs de la requête. Votre utilisation de la syntaxe $idcours->id est bonne mais il faut au préalable utiliser une boucle foreach pour atteindre la valeur contenue dans l'objet.

Essayez :

foreach ($idcours as $cours) {
echo $cours->id;
}

Seb
Moyenne des évaluations Utile (4)