[RESOLU] PDO::prepare

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] PDO::prepare

Re: PDO::prepare

par moogli » 30 juil. 2012, 21:40

arf boulet :s

merki

Re: PDO::prepare

par xTG » 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. :)

PDO::prepare

par moogli » 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

@+