[RESOLU] PDO::prepare

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 juil. 2012, 15:50

Salut,

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

@+
Il en faut peu pour être heureux ......

ViPHP
xTG
ViPHP | 7331 Messages

30 juil. 2012, 17:53

Simple erreur d'innatention.
$ret = $prepareCommune->execute();
$c = $query->fetchAll ( \PDO::FETCH_CLASS | \PDO::FETCH_PROPS_LATE, '\moogli\classes\pojo\Commune'  );
Tu n'utilises pas la bonne ressource pour ton fetch. :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 juil. 2012, 21:40

arf boulet :s

merki
Il en faut peu pour être heureux ......