denra
Messages postés7Date d'inscriptionmercredi 14 mai 2003StatutMembreDernière intervention 6 octobre 2008
-
4 déc. 2006 à 17:32
denra
Messages postés7Date d'inscriptionmercredi 14 mai 2003StatutMembreDernière intervention 6 octobre 2008
-
5 déc. 2006 à 15:52
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:
$con=mysql_pconnect($this->host,$this->user,$this->pwd); PAS D'ERREUR
$sql=mysql_query($query,$this->con); RETOURNE BIEN UN ID DE 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 ?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 4 déc. 2006 à 19:17
Hello,
pourquoi un pconnect ? Essayes sans, aussi, histoire de voir si t'as pas un soucis côté config Apache et Mysql sur ton serveur distant.
Tu peux aussi essayer une requête non mise en tampon : musql_unbuffered_query ().
denra
Messages postés7Date d'inscriptionmercredi 14 mai 2003StatutMembreDernière intervention 6 octobre 2008 5 déc. 2006 à 11:24
Merci pour les réponses, mais le problème reste entier.
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:
<?
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();
}
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 5 déc. 2006 à 11:47
Je requête sans cesse sur des serveurs distants, mssql ou mysql, sans aucun problème.
Tu as le même problème en faisant ujn fetch_assoc, un num_rows, etc ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
denra
Messages postés7Date d'inscriptionmercredi 14 mai 2003StatutMembreDernière intervention 6 octobre 2008 5 déc. 2006 à 12:46
C'est justement en faisant appel à ces fonctions dans la class DB que ça foire et retourne l'erreur, pourtant la ressource utilisée en paramètre de connexion ($this->con) est bien présente, l'accès à la DB étant sans problème:
$sql=mysql_query($query,$this->con); ===> ne retourne aucun résultat (vide, pas en erreur car pas 0)
$rez = array();
if(mysql_error()==""){
$rez["&status"]="1";
$rez["&cols"]=mysql_num_fields($sql); ===> erreur "supplied argument is not a valid MySQL result resource..." normale puisque pas de résultat passé en ressource
$rez["&rows"]=mysql_num_rows($sql);
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 5 déc. 2006 à 13:00
$sql=mysql_query($query,$this->con); ===> ne retourne aucun résultat (vide, pas en erreur car pas 0)
ce n'est pas ce que tu as dit dans ton 1er message...tu as dit :
$sql=mysql_query($query,$this->con); RETOURNE BIEN UN ID DE RECORDSET (PAR EXEMPLE #4)
Si tu fais ceci :
$sql=mysql_query($query,$this->con);
if (false === $sql) {
echo 'Erreur';
} else {
echo 'Tout va bien :
';
if (is_resource ($sql)) {
echo 'Ressource de type : ', get_resource_type ($sql);
} else {
echo 'Type : ', gettype ($sql), ' && valeur ', $sql;
}
}
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 5 déc. 2006 à 15:26
L'ID de connexion n'indique pas si mysql_query a fonctionné. mysql_query () renvoie une ressource de résultat mysql (mysql result), et c'est cette ressource qui est utilisée par les mysql_num, ou fetch_*.
Que donne mon test ?
denra
Messages postés7Date d'inscriptionmercredi 14 mai 2003StatutMembreDernière intervention 6 octobre 2008 5 déc. 2006 à 15:52
Ben après un démontage complet des objets générés par mon application, je crois avoir mis le mis le doigt sur quelquechose de beaucoup plus compliqué que prévu. J'ai fait une petite page de test simple et il s'avère que là je récupère normalement le résultat de requête. Dans mon cas, il y a des tas d'objets simples qui sont ensuite dérivés, dont les objets de connexion de DB qui appartiennent à des objets de niveau supérieur.
En me connectant sur la base distante, l'objet de connexion ne doit générer un ID qui fait conflit avec un autre stocké dans l'objets parent.
Je vais regarder de ce côté là.
Merci en tout cas malalam pour ton intervention.
Chaque chose étant bénéfique, je peux t'assurer que la class DB est d'une efficacité redoutable avec si peu de lignes de code..
Je m'en sers depuis des mois sans aucun soucis.