Page 1 sur 1

Requete SQL dans fonction Externe

Posté : 07 nov. 2013, 11:35
par lurnt-91
Bonjour à tous,
je suis actuellement apprenti et reprend le code entier d'un ancien apprenti (pas indenter et pas commenté...) bref il a créée des fonctions avec des requêtes SQL mais lors de l'appel à une de ces fonctions cela ne renvoie rien. J'essaye sur phpmyadmin et la rien non plus.
Voici la requête: "SELECT id_pays FROM pays WHERE code_devise = ? "
Bon sur phpmyadmin le '?' est = a 'EUR'. Bon je trouve le problème mais je ne le comprend pas il faut remplacer '=' par "like '%EUR%' ".

Enfin bon ma question déja est la suivante: comment faire pour remplacer le = par le like dans la fonction j'ai essayer pas mal de chose et jamais de résultat.

Voici un bout de la fonction:

<?php
class monnaie{
public function __construct($db)
{
$this->getMonnaieByCode = $db->prepare("SELECT id_pays FROM pays WHERE code_devise = ? ");
}

public function getMonnaieByCode($devise)
{
$this->getMonnaieByCode->execute(array($devise));
return $this->getMonnaieByCode->fetch();
}
}

L'appel a cet fonction qui ce trouve dans un autre fichier php:

$codeDev=$maDevise->getMonnaieByCode($devise);


à savoir: la requête retourne plusieurs ligne


Merci d'avance, je ne sais pas si c'est très clair.

Re: Requete SQL dans fonction Externe

Posté : 07 nov. 2013, 12:22
par yann18
Bonjour,
le point d'interrogation est un marqueur qui sera remplacé par un tableau de valeur(en l'occurrence la valeur EUR) lors de l'exécution de la requête.Ta requête avec LIKE devient:
<?php
class monnaie{
public function __construct($db)
{
$this->getMonnaieByCode = $db->prepare("SELECT id_pays FROM pays WHERE code_devise LIKE '%?%' ");
}

public function getMonnaieByCode($devise)
{
$this->getMonnaieByCode->execute(array($devise));
return $this->getMonnaieByCode->fetch();
}
}
avec phpmyadmin:

Code : Tout sélectionner

SELECT id_pays FROM pays WHERE code_devise LIKE '%EURO%';

Re: Requete SQL dans fonction Externe

Posté : 07 nov. 2013, 12:32
par lurnt-91
Merci pour ta réponse si rapide :D
j'avais déjà essayé et cela ne fonctionne pas? Peut être ma façon d'afficher, pour le test je fait un echo
<?php $codeDev=$maDevise->getMonnaieByCode($devise); ?>
<td><?php echo $devise,$codeDev[0],",",$codeDev ,"," ?></td>
donc devise m'affiche bien 'EUR' et les deux autres ne m'affiche rien :s

Re: Requete SQL dans fonction Externe

Posté : 07 nov. 2013, 12:51
par yann18
ceci n'est pas bon car tu as un tableau et pour le parcourir t'as besoin d'une boucle
 <td><?php echo $devise,$codeDev[0],",",$codeDev ,"," ?></td>
------------------------------
que donne ceci:
<?php $codeDev=$maDevise->getMonnaieByCode($devise); ?>
var_dump($codeDev);

Re: Requete SQL dans fonction Externe

Posté : 07 nov. 2013, 14:24
par lurnt-91
ceci donne boolean false

Re: Requete SQL dans fonction Externe

Posté : 07 nov. 2013, 14:46
par xTG
C'est donc que la requête a échoué.
Actives la gestion des erreurs de PDO : http://us3.php.net/manual/fr/pdo.error-handling.php

Re: Requete SQL dans fonction Externe

Posté : 07 nov. 2013, 15:04
par lurnt-91
Merci cela m'a corrigé quelques erreur mais sinon après avoir corrigé j'ai plus aucun message et toujours boolean false. J'ai tenté de mettre directement '%EUR%' dans la requête PHP et cela fonctionne donc je pense que cela vient de la façon d’écrire '%?%'
Mais je ne voit pas du tout comment le faire j'ai essayé toutes les cotes et guillemet possible et inimaginable :?

Re: Requete SQL dans fonction Externe

Posté : 07 nov. 2013, 16:21
par xTG
Dans ce cas que vaux $devise ?
Car si plus d'erreur c'est simplement que la requête ne renvoie aucun résultat.

Re: Requete SQL dans fonction Externe

Posté : 07 nov. 2013, 16:22
par yann18
d'accord je vois on place les % dans la méthode execute et active la gestion d'erreurs

<?php
class monnaie{
private $_db;//type PDO

public function __construct($db)
{
$this->getMonnaieByCode = $db->prepare("SELECT id_pays FROM pays WHERE code_devise LIKE ?");
$this->_db =$db; //

public function getMonnaieByCode($devise)
{
try
   {
   $this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
   $this->getMonnaieByCode->execute(array('%'.$devise.'%'));
   return $this->getMonnaieByCode->fetch();
  }catch(PDOException $err)
  {
 echo "erreur sql:" ,$err->getMessage();
 
 exit();
 }
}//end getMonnaieByCode
}//end monnaie
 
l'appel à la classe reste inchangé

Re: Requete SQL dans fonction Externe

Posté : 07 nov. 2013, 16:36
par lurnt-91
AHHHHHH MERCIIIIII !!!!!! :D cela fonctionne. J’espère réussir à résoudre les autres problèmes par moi même. Sinon je reviendrais vers vous Merci ;)