IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 MySQL Discussion :

Requête MySQL vers celle en PDO avec PHP [MySQL-5.6]


Sujet :

MySQL

  1. #1
    Membre habitué
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Points : 140
    Points
    140
    Par défaut Requête MySQL vers celle en PDO avec PHP
    Bonjour,

    Il y a une requête mysql qui marche bien, mais j'aimerais bien la changer en PDO.

    Voici la requête qui marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    $sql = <<<EOF
    	SELECT  
    		YEAR(`DTHR_VENTE`) AS ANNEE,
    		COUNT(ID) AS NBR_VENTES  
    	FROM `jp_graph_ventes`
    	GROUP BY YEAR(`DTHR_VENTE`)
    EOF;
     
    $mysqlCnx = @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) or die('erreur de connxion');
     
    @mysql_select_db(MYSQL_DATABASE) or die('pas bon BDD');
    $mysqlQuery = @mysql_query($sql, $mysqlCnx) or die('erreur de requête');
     
     
    while ($row = mysql_fetch_array($mysqlQuery,  MYSQL_ASSOC)) {
    	$tableauAnnees_00[] = 'Année ' . $row['ANNEE'];
    	$tableauNombreVentes_00[] = $row['NBR_VENTES'];
    }
     
     
    var_dump($tableauAnnees_00);
    echo '<p></p>';
    die(var_dump($tableauNombreVentes_00));
    et voici je ce que j'obtiens :
    array (size=3)
    0 => string 'Année 2004' (length=10)
    1 => string 'Année 2005' (length=10)
    2 => string 'Année 2006' (length=10)
    array (size=3)
    0 => string '7' (length=1)
    1 => string '34' (length=2)
    2 => string '68' (length=2)

    alors j'ai changé le code pour avoir une requête PDO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    /*
    							$sql = <<<EOF
    								SELECT  
    									YEAR(`DTHR_VENTE`) AS ANNEE,
    									COUNT(ID) AS NBR_VENTES  
    								FROM `jp_graph_ventes`
    								GROUP BY YEAR(`DTHR_VENTE`)
    							EOF;
     
    							$mysqlCnx = @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) or die('erreur de connxion');
    */
    try
    {
    	$bdd = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    }
    catch (Exception $e)
    {
            die('Erreur nconnection mysql : ' . $e->getMessage());
    }
     
    /*
    					@mysql_select_db(MYSQL_DATABASE) or die('pas bon BDD');
    					$mysqlQuery = @mysql_query($sql, $mysqlCnx) or die('erreur de requête');
    */
    $req = $bdd->prepare('SELECT YEAR (' . $champ_date . ') AS ANNEE, 
    					  COUNT (' . $champ_id . ') AS NBR_VENTES  
    					  FROM '. $tableData . ' 
    					  GROUP BY YEAR (' . $champ_date . ')');
     
    /*
    						while ($row = mysql_fetch_array($mysqlQuery,  MYSQL_ASSOC)) {
    						$tableauAnnees_00[] = 'Année ' . $row['ANNEE'];
    						$tableauNombreVentes_00[] = $row['NBR_VENTES'];
    						}
    */
     
    //while ($donnees = $req->fetch())
    while ($donnees = $req->fetch(PDO::FETCH_ASSOC))
    //while ($donnees = $req->fetchAll())
    //while ($donnees = $req->fetch(PDO::FETCH_BOTH))
    //while ($donnees = $req->fetch(PDO::FETCH_LAZY))
    //while ($donnees = $req->fetch(PDO::FETCH_OBJ))
    	{
    		$tableauAnnees_00[] = 'Année ' . $donnees['par_annee'];
    		$tableauNombreVentes_00[] = $row['combien'];
    	}
     
    var_dump($tableauAnnees_00);
    echo '<p></p>';
    die(var_dump($tableauNombreVentes_00));
     
    $req->closeCursor();
    mais j'ai obtiens :
    array (size=0)
    empty
    array (size=0)
    empty

    Donc je me demande si mon "fetch(PDO::FETCH_ASSOC))" n'est pas bon ?
    while ($donnees = $req->fetch(PDO::FETCH_ASSOC))

    Est-ce que vous pouvez m'aider ?

    merci

  2. #2
    Membre habitué
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Points : 140
    Points
    140
    Par défaut
    En fait, j'ai essayé tous les paramètres de Fetch :
    Sans paramètre et avec tous les paramètres : vide ; PDO::FETCH_ASSOC ; PDO::FETCH_BOTH ; PDO::FETCH_LAZY ; PDO::FETCH_OB...
    Mais je n'arrive pas trouvé la solution....

    merci

  3. #3
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Sauf erreur de ma part, du fait que la requête est dans un prepare je pense qu'il manque un $req->execute() avant le while.

    Sinon, il faut remplacer le prepare par un query.

    Dis moi si mon intuition est bonne

  4. #4
    Membre habitué
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Points : 140
    Points
    140
    Par défaut
    Bonjour Théocrite,

    Tu as raison : il manquai
    Citation Envoyé par Théocrite Voir le message
    S un $req->execute() avant le while.
    et aussi j'avais un espace après "COUNT' qui affichait :
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1630 FUNCTION graph.COUNT does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual'...
    Alors avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    try
    {
    	$bdd = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    }
    catch (Exception $e)
    {
            die('Erreur nconnection mysql : ' . $e->getMessage());
    }
     
    $req = $bdd->prepare('SELECT YEAR (' . $champ_date . ') AS ANNEE, 
    				/*       COUNT (' . $champ_id . ') AS NBR_VENTES                 */
    					  COUNT(' . $champ_id . ') AS NBR_VENTES 
    					  FROM '. $tableData . ' 
    					  GROUP BY YEAR (' . $champ_date . ')');
     
    $req->execute();					  
     
    while ($donnees = $req->fetch(PDO::FETCH_ASSOC))
    	{
    		$tableauAnnees_00[] = 'Année ' . $donnees['par_annee'];
    //                $tableauNombreVentes_00[] = $row['combien'];
    		  $tableauNombreVentes_00[] = $donnees['combien'];
    	}
    tout va bien et un grand merci pour cette aide

    Bonne journée

  5. #5
    Membre habitué
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Points : 140
    Points
    140
    Par défaut
    resolu

  6. #6
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour

    Pour information, cette discussion ne concernait pas directement MySql mais bien PHP. Il aurait été plus pertinent de la poster dans le bon forum.

    Pierre

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PDO] Mysql_connect et PDO avec PHP 4
    Par nounouuuuu201186 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 13/09/2013, 21h27
  2. [PDO] upgrade extension de pdo avec php 5.3
    Par gtraxx dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 07/12/2010, 23h37
  3. lenteur de requête mysql vers un poste windows
    Par richard dev dans le forum Réseau
    Réponses: 3
    Dernier message: 08/06/2009, 11h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo