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

PHP & Base de données Discussion :

requête avec sous requete qui fonctionne sur PhpMyAdmin mais pas avec un script PHP [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut requête avec sous requete qui fonctionne sur PhpMyAdmin mais pas avec un script PHP
    Bonjour,

    Avant tout j'ai cherché pas mal de temps avant de poster ici mon problème, mais impossible de trouver le même cas...

    Alors voilà le contexte :

    J'ai cette requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select T.* FROM
            (SELECT v.idPlayer as victim, v.name as vicName,k.idPlayer as killer, k.name as kilName, count(*) as number
            FROM stats_players v
            LEFT OUTER JOIN stats_events e ON v.idPlayer = e.idPlayerVictim
            LEFT OUTER JOIN stats_players k ON e.idPlayer = k.idPlayer
            WHERE e.type="PVP"  
            GROUP BY v.idPlayer,k.idPlayer
            HAVING COUNT(*) > 3 ORDER BY COUNT(*) DESC) AS T
    group by killer
    order by count(*) DESC, sum(number) DESC
    LIMIT 1
    Lorsque je la lance sous PhpMyAdmin, elle retourne bien une valeur, jusqu'ici tout va bien.

    Dans mon script PHP, je récupère cette requête (exactement la même, elle n'est pas généré via un algorithme) qui est stocké en base de données puis je la lance avec le script suivant :

    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
    53
    54
    55
    56
    57
    58
    59
    try {
        $bdd = new PDO('mysql:host=' . SQL_HOST . ';dbname=' . SQL_DBASE, SQL_USER, SQL_PASS);
        $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
        $bdd->query('SET session wait_timeout=120');
        $bdd->query('SET session interactive_timeout=120');
     
    } catch (PDOException $e) {
        die('Error during the connection to the  MYSQL database : ' . $e->getMessage());
    }
     
    $title['request'] = 'select killer as idPlayer FROM
        (SELECT v.idPlayer as victim, v.name as vicName,k.idPlayer as killer, k.name as kilName, count(*) as number
        FROM stats_players v
        LEFT OUTER JOIN stats_events e ON v.idPlayer = e.idPlayerVictim
        LEFT OUTER JOIN stats_players k ON e.idPlayer = k.idPlayer
        WHERE e.type="PVP"  
        GROUP BY v.idPlayer,k.idPlayer
        HAVING COUNT(*) > 3 ORDER BY COUNT(*) DESC) AS T
        group by killer
        order by count(*) DESC, sum(number) DESC
        LIMIT 1';
     
    $playerList = request_db($bdd,$title['request']);
     
    var_dump($playerList);
     
    function request_db($bdd, $request, $txt = '') {
        try {
            if (isset($_GET['debug']) && $_GET['debug'] == 'request') {
                echo $request . '<br>';
                // logfile('requete : ' . $request);
            }
     
            $timeReqStart = microtime(true);
            $result = $bdd->query($request);
            $timeReqEnd = microtime(true);
            $timeReq = $timeReqEnd - $timeReqStart;
            if ($txt != '') {
                echo $txt . '<br>';
            }
            if (preg_match("/^SELECT/", $request)) { /* Return the ID of the last request (INSERT ONLY) */
                $res_tab = $result->fetchAll();
                $result->closeCursor();
                return $res_tab;
            } else if (preg_match("/^INSERT/", $request) || preg_match("/^UPDATE/", $request)) { /* All that not insert return table */
                echo 'Time Process request : ' . number_format($timeReq, 3) . ' sec <br>';
                return $bdd->lastInsertId();
            }
        } catch (Exception $e) {
            echo 'Error while contacting the database. Please contact the administrator. <br>';
            logfile($request);
            logfile('request error :' . $e->getMessage());
            if (isset($_GET['debug'])) {
                echo 'request : ' . $request . '<br>';
                die('Error during the request to the MYSQL database : <br>' . $e->getMessage());
            }
        }
    }
    Le var_dump me retourne un 'null'. (pour rappel cette même requête me retournait bien un valeur sous phpMyAdmin.)

    Du coup j'ai testé mon script avec les requêtes suivantes :
    1. Requête sans sous-requête
    Résultat : OK (elle me retourne bien des valeurs)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT v.idPlayer as victim, v.name as vicName,k.idPlayer as killer, k.name as kilName, count(*) as number
            FROM stats_players v
            LEFT OUTER JOIN stats_events e ON v.idPlayer = e.idPlayerVictim
            LEFT OUTER JOIN stats_players k ON e.idPlayer = k.idPlayer
            WHERE e.type="PVP"  
            GROUP BY v.idPlayer,k.idPlayer
            HAVING COUNT(*) > 3 ORDER BY COUNT(*) DESC
    2. Requête avec sous-requete mais avec un affichage simple
    Résultat : KO (var_dump retourne 'null')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select T.* FROM
            (SELECT v.idPlayer as victim, v.name as vicName,k.idPlayer as killer, k.name as kilName, count(*) as number
            FROM stats_players v
            LEFT OUTER JOIN stats_events e ON v.idPlayer = e.idPlayerVictim
            LEFT OUTER JOIN stats_players k ON e.idPlayer = k.idPlayer
            WHERE e.type="PVP"  
            GROUP BY v.idPlayer,k.idPlayer
            HAVING COUNT(*) > 3 ORDER BY COUNT(*) DESC) AS T
    Du coup j'ai l'impression que le problème vient de la sous-requête mais aucune idée pourquoi et je n'ai aucune idée de ce que je dois changer pour que cela fonctionne... Si vous avez une idée lumineuse, je suis preneur.

    Merci d'avance,

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pour gagner du temps : est-ce que tu as testé ta requête directement en PHP sans tout ton système auxiliaire ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Oui, j'ai testé en la mettant directement dans le script, même résultat.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as contrôlé ce que valait $result ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    hhhhaaaaaaaaa tu déchires !
    le $result était bon mais par contre il ne rentrait pas dans le if (/^SELECT/) .... parceque ma requête n'avait pas la bonne case (j'avais écrit 'select' en minuscule)....
    Le truc à la con

    Je pense que j'aurais pu chercher très longtemps sans trouver !

    Encore merci !

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    D'où l'importance de ma première question ; je ne sais pas ce que tu as testé mais ce n'était pas la requête directement en PHP.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Ok je n'avais pas saisi ce que tu demandais, j'ai testé ma requête directement sans la récupérer de la base de données, mais en la mettant 'en dur' en appelant ma fonction.
    Effectivement j'aurais pu testé directement le ->query sans fioriture, j'y penserais pour les prochaines fois.
    Désolé pour la confusion et encore merci pour le coup de main.

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

Discussions similaires

  1. [MySQL] Requête fonctionne sur phpMyAdmin mais pas dans le code PHP
    Par cocobuck dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 24/02/2016, 10h23
  2. Script qui fonctionne sur chrome mais pas firefox
    Par crozet.magenta dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 15/01/2013, 12h14
  3. [MySQL] requete qui fonctionne en phpadmin mais pas en direct ?
    Par goupyl dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 23/02/2010, 10h52
  4. Eval qui fonctionne sur Firefox mais pas sur IE :D
    Par Comawhite dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 30/10/2006, 11h31
  5. Programme fonctionnant sur Eclipse mais pas avec le jar?
    Par kirik dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 10/02/2004, 13h43

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