Page 1 sur 1

Pbr Pdo

Posté : 02 sept. 2011, 12:17
par darkwhite
salut,

j'ai un petit pbr, je me connect à ma base avec PDO:

config.php qui est appelé dans index.php

<?php
try
{
$bdd = new PDO("mysql:host=mysqlX-XX.XXXX;dbname=XXXXXX",'XXXXX', 'XXX');
$bdd->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,true);

}
catch( PDOException $e )
{
exit('Connexion impossible : '.$e->getMessage());
}

?>

ensuite j'ai une page index.php où j'appel une fonction "affichageEvenement();"

<?php

require_once 'function/AffichageEvenement.inc.php';
//require_once 'class/evenement.class.php';
require_once 'function/AffichageEvenement.inc.php';
?>
<html>
....
<?php
affichageEvenement();
?>
...
</html>

Ma fonction "AffichageEvenement.php" en question qui est appelée sur index.php


<?php
function affichageEvenement(){


$result_evenement=$bdd->query("SELECT * FROM calendar_event ");
$nbre_rows = $result_evenement->rowCount();


echo '<table ="row_evenemment>';
while($row_ligne = $result_evenement->fetch()){
echo '
<tr>
<td class="nom">'.$row_ligne['event_name'].'</td>
<td class="date">'.$row_ligne['event_date'].'</td>
<td class="heure">'.$row_ligne['event_time'].'</td>
<td class="description">'.$row_ligne['event_text'].'</td>
</tr>';
}
echo '</table>';
}
?>


et voilà le resultat "Fatal error: Call to a member function query() on a non-object in /homez.59/peterturv/www/class/evenement.class.php on line 5"

Donc pour tester ma connexion j'ai directement mis l'appel à ma db dans la fonction AffichageEvenement(){....} et là ça fonctionne.

Pourquoi? Pouvez-vous svp m'aiguiller!
merci beaucoup.

Re: Pbr Pdo

Posté : 02 sept. 2011, 13:16
par moogli
salut,

problème de portée de variable.

tel quelle ta variable $bdd est local à la fonction, c'est adire qu'elle n'est utilisable que dans la fonction et ne fait en aucun cas référence à une quelconque variable $bdd déclarée avant dans le code

actuellement tu a
<?php
try
{
$bdd = new PDO("mysql:host=mysqlX-XX.XXXX;dbname=XXXXXX",'XXXXX', 'XXX');
$bdd->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,true);

}
catch( PDOException $e )
{
exit('Connexion impossible : '.$e->getMessage());
}
function affichageEvenement(){
$result_evenement=$bdd->query("SELECT * FROM calendar_event ");
//etc
}
?>
une fonction ou une classe permet d'avoir du code "autonome" dans un coin que tu utilisera a volonté autre part, tous ce qui passe en dehors de la fonction ou de la classe n’influence pas ce qui se passe dedans.
Pour que cela soit le cas deux possibilité :
- passer la variable en argument à la fonction (sachant que l'objet est, par défaut, passé par argument c'est nikel)
- utilisé le mot clef global ou le tableau $GLOBALS afin d'utilisé la variable déclaré en dehors de la fonction
function affichageEvenement(){
$result_evenement=$GLOBALS['bdd']->query("SELECT * FROM calendar_event ");
// ou
global $bdd;
$result_evenement=$bdd->query("SELECT * FROM calendar_event ");

// ou 
function affichageEvenement($bdd){
$result_evenement=$bdd->query("SELECT * FROM calendar_event ");
et a l'utilisation
afficheEvenement( $variableConnexionPDO);
?>
@+

Pbr Pdo

Posté : 02 sept. 2011, 14:14
par darkwhite
OK merci ça marche nickel ^^
Mais comment on fait pour clôturer ?

Y a pas de question bêtes, il n'y a que ceux qui les posent qui sont bêtes!!!!

Re: Pbr Pdo

Posté : 02 sept. 2011, 14:36
par moogli
pour marquer le sujet résolu doit y avoir une "coche" verte sur mon message (ou le tiens d'ailleurs ;) )

@+