PDO::prepare
Posté : 30 juil. 2012, 15:50
Salut,
Lorsque j’essaie :
Alors qu'avec
la valeur passée à la requete (idCommune) est toujours valorisé est présent dans la base.
Qu'est ce qui pourrait faire que la requete préparée n'arrive pas à s’exécuter correctement ? (ne récupère pas de tuple).
le tout est dans une classe, "pdo" est récupéré par le constructeur à partir d'une classe qui gère un singleton (je n'ai pas d'autre requête avant celle ci).
merci
@+
Lorsque j’essaie :
<?php
$sql = 'select * from lieux';
$query = $this->pdo->query ( $sql );
$lieux = $query->fetchAll ( \PDO::FETCH_CLASS | \PDO::FETCH_PROPS_LATE, '\moogli\classes\pojo\Lieux' );
if ($lieux === false) {
$err = $this->pdo->errorInfo ();
throw new \PDOException ( 'Impossible de récupérer les lieux ' . "\n" . $err [2] );
}
$query->closeCursor();
// on récupère les communes
$prepareCommune = $this->pdo->prepare ( 'select * from communes where idcommune= :id' );
foreach ( $lieux as $l ) {
// on récupère la commune
$idCommune = $l->getIdcommune();
$prepareCommune->bindValue ( ':id', $idCommune, \PDO::PARAM_INT );
$ret = $prepareCommune->execute();
$c = $query->fetchAll ( \PDO::FETCH_CLASS | \PDO::FETCH_PROPS_LATE, '\moogli\classes\pojo\Commune' );
if ($c === false) {
$err = $this->pdo->errorInfo ();
throw new \PDOException ( 'Impossible de récupérer la commune' . "\n" . $err [2]);
}
if( count($c) !== 1)
throw new \Exception('Plusieurs commune avec le même id ou pas de commune ('.$l->getIdcommune().')');
$commune = $c[0];
$codeDep = $commune->getCodedep();
$q->closeCursor();
}
$c est un tableau toujours vide. Alors qu'avec
<?php
$sql = 'select * from lieux';
$query = $this->pdo->query ( $sql );
$lieux = $query->fetchAll ( \PDO::FETCH_CLASS | \PDO::FETCH_PROPS_LATE, '\moogli\classes\pojo\Lieux' );
if ($lieux === false) {
$err = $this->pdo->errorInfo ();
throw new \PDOException ( 'Impossible de récupérer les lieux ' . "\n" . $err [2] );
}
$query->closeCursor();
// on récupère les communes
foreach ( $lieux as $l ) {
// on récupère la commune
$idCommune = $l->getIdcommune();
$q = $this->pdo->query('select * from communes where idcommune= '.$this->pdo->quote($l->getIdcommune(), \PDO::PARAM_INT));
$c = $q->fetchAll ( \PDO::FETCH_CLASS | \PDO::FETCH_PROPS_LATE, '\moogli\classes\pojo\Commune' );
if ($c === false) {
$err = $this->pdo->errorInfo ();
throw new \PDOException ( 'Impossible de récupérer la commune' . "\n" . $err [2]);
}
if( count($c) !== 1)
throw new \Exception('Plusieurs commune avec le même id ou pas de commune ('.$l->getIdcommune().')');
$commune = $c[0];
$codeDep = $commune->getCodedep();
$q->closeCursor();
}
$c contient bien un résultat. la valeur passée à la requete (idCommune) est toujours valorisé est présent dans la base.
Qu'est ce qui pourrait faire que la requete préparée n'arrive pas à s’exécuter correctement ? (ne récupère pas de tuple).
le tout est dans une classe, "pdo" est récupéré par le constructeur à partir d'une classe qui gère un singleton (je n'ai pas d'autre requête avant celle ci).
merci
@+