Bonjour,
Je travail depuis pas mal de temps avec une classe mysql que j'ai développé et là je suis face a un problème que je n'avais jamais rencontré.
Si par exemple je fait une première requête , que je traite le résultat de cette requête et que je souhaite refaire une nouvelle requête pendant le traitement :
<?
$sql->query(...);
while($data = $sql->fetch())
{
....
if(...)
{
$sql->query(...)
}
}
?>
Et bien la classe est complétement perdu et va mélanger les deux résultats (en fait elle me sort une erreur mais dans l'idée c'est ca).
J'ai contourné le problème en passant par une seconde instance , mais ca ne me convient que très moyennement.
Voici un extrait de ma classe :
/**
* Connexion. Connexion ? la base de donn?e
* @access public
* @return boolean Etat pour la connexion
*/
public function connect()
{
if($this->connect == NULL)
{
$this->connect = mysql_connect($this->bdserv,$this->bduser,$this->bdpass) or die (mysql::error('Connection au serveur '.$this->dbserv.' avec '.$this->dbuser.' ?chou?e.'));
mysql_select_db($this->bdname,$this->connect) or die (mysql::error('Selection de la base '.$this->dbname.' impossible'));
return true;
}
else
{
return FALSE;
}
}
/**
* Envoi. Envoi de la requete Mysql
* @access public
* @param string $sql Requete sql
* @return boolean Etat pour l'envoi
*/
public function query($sql)
{
if($this->connect == FALSE)
{
mysql::connect();
}
if($this->resultat = mysql_query($sql,$this->connect)or die(mysql::error($sql)))
{
$this->requete = trim($sql);
$this->count++;
return TRUE;
}
else
{
return FALSE;
}
}
public function safesql($string)
{
return mysql_real_escape_string($string);
}
/**
* Derni?re ID. Retourne la derniere ID ins?r?e dans la bdd
* @access public
* @return int Derni?re id
*/
public function last_id()
{
return @mysql_insert_id($this->connect);
}
/**
* Nombre affect?e. Renvoie le nombre de lignes affect?es par la requete pr?c?dente
* @access public
* @return int Nombre de ligne
*/
public function affected()
{
if(isset($this->resultat))
{
if ( preg_match('`^select`i',$this->requete) )
return mysql_num_rows($this->resultat);
if ( preg_match('`^(insert|update|delete)`i',$this->requete) )
return mysql_affected_rows($this->connect);
}
}
/**
* Réponse mysql. Retourne le résultat de la requete
* @access public
* @param string $type Type de tableau souhaité en retour (defaut = associatif)
* @return array Tableau de la réponse mysql
*/
public function fetch($type='assoc')
{
switch($type)
{
case 'assoc' :
return mysql_fetch_assoc($this->resultat);
break;
case 'array' :
return mysql_fetch_array($this->resultat,MYSQL_NUM);
break;
case 'object' :
return mysql_fetch_object($this->resultat);
break;
case 'row' : // Retourne 1 ligne de r?sultat
return mysql_fetch_row($this->resultat);
break;
default:
echo'Erreur dans le type de tableau';
break;
}
}
Merci