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:
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!
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:
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?