Yemanjah
Messages postés8Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention29 avril 2008
-
9 févr. 2006 à 03:08
Yemanjah
Messages postés8Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention29 avril 2008
-
9 févr. 2006 à 13:44
Bonjour ,
J'ai un problème des plus étonnants , je souhaite mettre en place
une application qui bascule facilement d'une base de données à une
autre (dans mon cas MySQL/PostGreSQL).
Pour cela j'utilise les méthodes quasi-jumelles en php :
pg_query()/mysql_query()
pg_connect()/mysql_connect()
etc...
Bref , tout fonctionne correctement (la connexion se fait bien dans
les deux cas, il est possible de collecter des données dans les deux
bases, etc..)
J'ai quand même un problème assez étrange avec la fonction fetch_assoc
(pour les deux types de base).
Le cas n'est pas forcément simple à expliquer , donc j'vais prendre un exemple :
J'ai une requète simple du genre : "Select count(NumDessin)as Nombre from dessin ;"
j'appel donc une méthode d'une autre classe comme ceci :
$sqlCount = $Truc->SelectSQL("Select count(NumDessin)as Nombre from dessin ;");
Voici la méthode SelectSQL($MaRequete)
PHP:, ----
function SelectSQL($ReqSelect)
{
// On récupère le type de base dans une variable
$type = $this->TypeBase;
if ($type == "MySQL") {
// La base utilisé est de type MySQL , on utilise les méthodes MySQL d'accés à la base :
$this->Query $resultatNum mysql_query($ReqSelect)or die('Erreur SQL !
 
' . $ReqSelect . '
' . mysql_error());
return $this->GetArrayAssoc($resultatNum, $ReqSelect);
} elseif ($type == "PgSQL") {
// La base utilisé est de type PostGreSQL , on utilise les méthodes PostGre d'accés à la base :
$this->Query $resultatNum pg_query($ReqSelect)or die('Erreur PostgreSQL !
 
' . $ReqSelect . '
' . pg_last_error());
if (!$resultatNum) {
echo pg_last_error($resultatNum);
}
return $this->GetArrayAssoc($resultatNum, $ReqSelect);
}
}
Comme vous pouvez le voir, j'appel une methode GetArrayAssoc()...
vous l'avez devinez , ça me permet de récupérer un tableau associatif.
Voila la méthode GetArrayAssoc() (celle qui pose problème à mon avis) :
PHP:, ----
function GetArrayAssoc($QueryPar, $RequetSel)
{
// On récupère (encore) le type de base dans une variable
$type = $this->TypeBase;
if ($this->countSQL($RequetSel) > 0) {
if ($type == "MySQL") {
while ($d = mysql_fetch_assoc($QueryPar)) {
$Tableau[] = $d;
}
} elseif ($type == "PgSQL") {
while ($d = pg_fetch_assoc($QueryPar)) {
$Tableau[] = $d;
}
}
} else {
$Tableau = false;
}
var_dump($Tableau);
return $Tableau;
}
Je ne vous détail pas la fonction countSQL (qui me permet simplement de
compter le nombre d'enregistrement que renvoit la requete), à mon
humble avis mon problème ne vient pas de la.
Voila ce que me renvoit le var_dump du tableau associatif :
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 9 févr. 2006 à 11:50
En tout cas, c'est mal codé...
"
$type = $this->TypeBase;" <== ca sert strictement à rien ca..."
$this->Query $resultatNum mysql_query($ReqSelect)or die('Erreur SQL !
" <== remarque, ca c'est pire !!
"
$this->Query $resultatNum pg_query($ReqSelect)or die('Erreur PostgreSQL !
&nbsp;
' . $ReqSelect . '
' . pg_last_error());
if (!$resultatNum) {
echo pg_last_error($resultatNum);
}"
Le OR DIE() est la justement pour éviter de faire un if() derriere ! Inutile ici !
Autrement, c'est pas dans ta table SQL que ca merde, mais bien de ton code.
De toute facon, tu utilises une classe sans utiliser les propriétés orientée objet de celle ci ! A quoi ca sert ???
function GetArrayAssoc($QueryPar, $RequetSel) <== Pourquoi vouloir faire passer ta ressource Query et ta requète string SQL en argument ?? Alors qu'il te suffit de faire :
$this->Query;
$this->Sql;
et tu obtiens tout ce que tu veux !
A mon avis, tu devrais revoir la structure de la classe. Rien que pour commencer.