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)
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 !<br>
<p> </p>' . $ReqSelect . '<br>' . 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 !<br> <p> </p>' . $ReqSelect . '<br>' . 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) :
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 :
MySQL :
array(1) { [0]=> array(1) { ["Nombre"]=> string(2) "14" } }
PgSQL :
array(1) { [0]=> array(1) { ["nombre"]=> string(2) "14" } }
Comme vous pouvez le remarquer , le tableau est quasiment le même à une seule exception , la majuscule dans le tableau.
Ce qui m'embète en fait, car une fois revenue dans ma page principal, je récupère la valeur de cette façon :
$sqlNum[0]['Nombre']
Est-ce que quelqu'un sait d'ou le problème peut venir ???
Je suppose que c'est la fonction pg_fetch_assoc() qui est plus capricieuse que sa cousine mysql_fetch_assoc()....
Mais je n'ai rien trouvé à ce sujet dans la documentation PHP.
Merci d'avance.