Affichage des données

Résolu
Bonjour,

J'ai crée une base de données dans sql et je veux l'afficher dans php j'ai utilisée ce code
<?php

  include 'database.php';
  global $db;
  $q =$db->query('SELECT * FROM utilisateurs');
  while ($user= $q->fetch()) {
   var_dump($user);
  }
  ?>

pour le fichier database.php
<body>
   <?php
   define('Host','localhost');
   define('DB_name','siteweb');
   define('utilisateurs','root');
   define('Pass','');

 try{
  $db=new PDO("mysql:3306.host=" .Host. ";DBname" .DB_name,utilisateurs,Pass);
  $db -> setAttribute(PDO:: ATTR_ERRMODE,PDO:: ERRMODE_EXCEPTION);
  echo "connexion >OK";

    } catch(PDOException $e){
   echo $e;


  }


On m'affiche l'erreur suivante :
( ! ) Fatal error: in C:\wamp644\www\index.php on line 22
( ! ) PDOException: in C:\wamp644\www\index.php on line 22
Pouvez-vous m'aider svp ?

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

2 réponses

  1. Modérateur
    Bonjour,

    Déjà, que vient faire le <body> dans ton database.php ??
    Retire le !

    Ensuite,
    Il faut activer l'affichage des erreurs PHP
    Ne pas utiliser global si tu n'es pas dans une fonction
    Placer CHAQUE requête dans un bloc try/catch
    Perso, je te conseille déviter le ->query et de prendre la bonne habitude d'utiliser des requête préparées.

    Ce qui donnerait un truc du genre
    <?php
    //Affichage des erreurs PHP
    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);
      
    // On inclus la connexion à la bdd  
    require_once 'database.php';
    
    //préparation de la requêt et des variables éventuelles
    $sql = "SELECT * FROM utilisateurs";
    $datas = null; // pas de variable à passer à la requête
    
    //Execution de la requete
    try{
      $requete = $db -> prepare($sql) ;
      $requete->execute($datas) ;
      
      //on stocke le resultat dans un array
      $result = $requete->fetchAll();
      
    }catch(Exception $e){
      // en cas d'erreur :
       echo " Erreur ! ".$e->getMessage();
       echo " Les datas : " ;
       print_r($datas);
    }
    
    //on vérifie que le résultat de la requête n'est pas vide
    if(!empty($result)){
      // on boucle sur chaque ligne du résultat
      foreach($result as $user ){
        var_dump($user);
      }
    }
    

    Un peu de lecture complémentaire
    https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

    et ceci :
    https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
    1. Bonjour
      Merci beaucoup d'avoir pris le temps pour répondre à ma question après avoir essayé le code je reçois une autre erreur
      SQLSTATE[3D000]: Invalid catalog name: 1046 Aucune base n'a �t� s�lectionn�e Les datas : SELECT * FROM utilisateurs
      1. Modérateur
        Si tu avais regardé les liens que je t'ai donné... tu aurais du voir que ta chaine de connexion n'est pas bonne
        Remplace ton code de connexion par:
        <?php
           define('Host','localhost');
           define('DB_name','siteweb');
           define('utilisateurs','root');
           define('Pass','');
           define('Port',3306);
           
        try{ 
           $db =new PDO('mysql:host='.Host.';port='.Port.'; dbname='.DB_name.'; charset=utf8', utilisateurs, Pass);
            // Activation des erreurs PDO
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
            $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
        } catch(PDOException $e) {
            die('Erreur : ' . $e->getMessage());
        }