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 :

Récupération de recordset suite à requête sur base distante [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Récupération de recordset suite à requête sur base distante
    Bonjour,

    Je me connecte sur une base distante sans problème mais je n'arrive pas à récupérer les résultats de requête probablement à cause du stockage temporaire des ressources sur le serveur distant et non sur le local:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $this->con=mysql_pconnect($this->host,$this->user,$this->pwd); // PAS D'ERREUR
    $sql=mysql_query($query,$this->con); // RETOURNE BIEN UN ID DE RESSOURCE CORRESPONDANT AU RECORDSET (PAR EXEMPLE #4)
    $rez["cols"]=mysql_num_fields($sql); // RETOURNE L'ERREUR: Warning: mysql_num_fields(): supplied argument is not a valid MySQL result resource in...
    Quelqu'un sait-il comment accéder au resultat de la requête dans ce cas de figure?

    Merci par avance!

  2. #2
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut

    tu es sur que mysql_query renvoit ce que tu penses ?
    tu as essayé avec mysql_num_rows pour voir qu'il te retournes bien quelque chose ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut précisions et code couche DB
    Je ne détaille pas la totalité du code ni les requêtes car ce serait un peu long et n'apporterait rien de plus mais voici des précisions pour que vous comprenniez le problème.
    L'application marche parfaitement bien sur des accès a la DB en local (localhost) et le résultat de requête est normalement accessible.
    Il est stocké dans une ressource identifiée par son ID et récupérable par php en faisant référence à cet ID.
    Dans mon cas, depuis que j'ai déplacé mon application sur un autre serveur, je fais des requêtes sur la base située sur l'ancien serveur.
    L'accès à la base se fait sans aucun problème (utilisateur mysql reconnu et accès distant autorisé sur cet utilisateur), le résultat de ma requête passée par la fonction mysql_query() génère bien un ID de ressource mais l'utilisation de cette ressource pour récupérer le recordset génère l'erreur mentionnée.

    Il n'y a pas d'erreur de fonctionnement du code de la couche de DB que je vous livre ci-après pour ceux qui s'y intéresseraient:

    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    <?
    class DB{
     
        var $con = null;
        var $host = DBHOST;
        var $user = DBUSER;
        var $pwd = DBPWD;
        var $dbname = DBNAME;
     
        function DB(){
            $this->con = $this->connect();
        }
     
        function connect(){
            if(!($con=mysql_pconnect($this->host,$this->user,$this->pwd)))
                trigger_error("Cant connect to database!");
            if(!mysql_select_db($this->dbname))
                trigger_error("Cant use db " . $this->dbname);
            return $con;
        }
     
        function new_connect($host,$user,$pwd,$dbname){
        $this->host=$host;
        $this->user=$user;
        $this->pwd=$pwd;
        $this->dbname=$dbname;
        $this->DB();
        }
     
        function get($query){
        //echo $query;
            if(strlen($query) > 4){
                $sql=mysql_query($query,$this->con);
                $rez = array();
                if(mysql_error()==""){
                    $rez["&status"]="1";
                    $rez["&cols"]=mysql_num_fields($sql);
                    $rez["&rows"]=mysql_num_rows($sql);
                    $rez["&total"]=$rez["&cols"]*$rez["&rows"];
                    if($rez["&cols"]<=1 && $rez["&rows"]<=1){    // cols = 1, rows = 1
                        $sql1=mysql_fetch_array($sql);
                        $rez["&val"]=$sql1[0];
                        $fname = mysql_field_name($sql,0);
                        $rez["&fieldname"] = array();
                        $rez["&fieldname"][] = $fname;
                        $rez[$fname]=array();
                        $rez[$fname][]=$sql1[0];
                    }
                    elseif($rez["&cols"]<=1 && $rez["&rows"]>1){        // cols = 1, rows > 1
                        $i=0;
                        $fname = mysql_field_name($sql,$i);
                        $rez["&fieldname"] = array();
                        $rez[$fname] = array();
                        $rez["&fieldname"][] = $fname;
                        while($sqlr=mysql_fetch_array($sql)){
                            $rez[]=$sqlr[0];
                            $rez[$fname][]=$sqlr[0];
                            $i++;
                        }
                    }
                    elseif($rez["&cols"]>1 && $rez["&rows"]<=1){    // cols > 1, rows = 1
                        $i=0;
                        $rez["&fieldname"] = array();
                        for($j=0;$j<$rez["&cols"];$j++){
                            $fname = mysql_field_name($sql,$j);
                            $rez["&fieldname"][] = $fname;
                            $rez[$fname] = array();
                        }
                        while($sqlr=mysql_fetch_array($sql)){
                            for($j=0;$j<$rez["&cols"];$j++){
                                $rez[$rez["&fieldname"][$j]][]=$sqlr[$j];
                                $rez[$j][]=$sqlr[$j];
                            }
                            $i++;
                        }
                    }
                    elseif($rez["&cols"]>1 && $rez["&rows"]>1){        // cols > 1, rows > 1
                        $i=0;
                        $rez["&fieldname"] = array();
                        for($j=0;$j<$rez["&cols"];$j++){
                            $fname = mysql_field_name($sql,$j);
                            $rez["&fieldname"][] = $fname;
                            $rez[$fname] = array();
                        }
                        while($sqlr=mysql_fetch_array($sql)){
                            for($j=0;$j<$rez["&cols"];$j++){
                                $fname = mysql_field_name($sql,$j);
                                $rez[$fname][]=$sqlr[$j];
                            }
                            $i++;
                        }
                    }
          }else{
                $rez["&status"]="0";
                $rez["&error"]=mysql_error();
          echo "QUERY: $query<br>";
                trigger_error("ERROR: " . mysql_error());
          }
                mysql_free_result($sql);
                return $rez;
            }
        }
     
        function query($query){
            $sql=mysql_query($query,$this->con);
            //echo $query;
            $rez = array();
            if(mysql_error()==""){
                $rez["&status"]="1";
                $lastid=$this->get("SELECT LAST_INSERT_ID() as lid");
                $rez["&id"]=$lastid["&val"];
            }else{
                $rez["&status"]="0";
                $rez["&error"]=mysql_error();
          echo "QUERY: $query<br>";
          trigger_error("ERROR: " . mysql_error());
            }
            return $rez;
        }
    }
     
    $DB=new DB;
    ?>
    Le problème vient juste de la récupération de la ressource générée.

    Qui a déjà fait l'expérience d'adresser des requêtes sur un serveur distant?

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut modif de message
    OOps! j'ai fait une erreur dans ma demande: en fait c'est carrément la ressource qui est vide suite à la requête donc l'erreur générée est normale.
    Ca n'explique pas pourquoi le résultat de requête est inexistant...

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

Discussions similaires

  1. Requêtes sur base de donnée distante
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 29/07/2013, 11h00
  2. Requête sur base de données distante
    Par themich dans le forum Requêtes
    Réponses: 0
    Dernier message: 09/02/2013, 18h24
  3. Execution de requête sur base de données distante
    Par ~~PriVate JoKe~~ dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/11/2006, 21h59
  4. Requête sur base de données ACCESS
    Par JLamotte dans le forum Access
    Réponses: 1
    Dernier message: 21/11/2005, 10h50
  5. phpmyadmin sur base distante
    Par titi63 dans le forum Installation
    Réponses: 3
    Dernier message: 02/10/2003, 18h19

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