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 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230
| <?php
/******************************
classe de connexion a mysql
par sebastien muller
*******************************/
class db
{
/**************/
/* proprietes */
/**************/
var $host=''; // l'hote de connexion
var $database=''; // la base
var $login=''; // le login de connexion a la base
var $passwd=''; // le mot de passe correspondant au login
var $query_id=0; // identifiant de resultat
var $link_id=0; // identifiant de connexion
var $error=''; // description de la derniere erreur
var $record=array(); // tableau contenant l'enregistrement courant
var $row=0; // compteur de ligne (la ligne courante du recordset)
var $auto_free=1; // a 1 si on libere automatiquement la memoire apres certaines fonctions
/************/
/* methodes */
/************/
/*
constructeur db(autofree)
link_id connect(hote, base, login, passwd)
void free()
query_id query(query)
int next_record()
row seek(pos)
int num_rows()
int num_fields()
int affected_rows()
*/
// le constructeur choisi uniquement si on veut liberer ou pas la memoire
function db($autofree)
{
$this->auto_free=$autofree;
}
// ouvre une connexion persistante et se connecte a la base desiree
function connect($hote='', $base='', $util='', $pass='')
{
// verification
if($hote !='')$this->hote=$hote; // host=$hote;
if($base !='')$this->database=$base;
if($util !='')$this->login=$util;
if($pass !='')$this->passwd=$pass;
// ouverture de la connexion persistante
if(($this->link_id=mysql_pconnect($this->host, $this->login, $this->passwd))==false)
{
$this->error="impossible de creer une connexion persistante !";
return(0);
}
// selection de la base
if(@mysql_select_db($this->database, $this->link_id)==false)
{
$this->error="impossible de selectionner la base !";
return(0);
}
mysql_query("SET NAMES 'utf8'");
return($this->link_id);
}
// pour liberer la memoire de la derniere requete
function free()
{
if(@mysql_free_result($this->query_id)==false)
$this->error="erreur lors de la tentative de liberation de memoire";
$this->query_id=0;
}
// pour lancer une requete sur la connexion courante
function query($query='')
{
$rtval=0;
// pour tester si il existe une connexion
if($this->link_id!=0)
{
// test si on doit liberer la memoire
if($this->query_id!=0)
{
if($this->auto_free==1)
$this->free();
}
if(($this->query_id=mysql_query($query, $this->link_id))==false)
$this->error="impossible de lancer la requete";
else
{
$rtval=$this->query_id;
$this->row=0;
}
}
else
$this->error="impossible de lancer une requete, il n'existe pas de connexion !";
@mysql_close(); // Ferme automatiquement la connexion après l'execution de la requête.
return($rtval);
}
// pour avancer d'un élément dans le résultset
function next_record()
{
$rtval=0;
if($this->query_id!=-1)
{ // si il y a un index de resultat
$this->record=@mysql_fetch_array($this->query_id);
$this->row=$this->row + 1;
// test validite
$stat=is_array($this->record);
if(!$stat && $this->auto_free)
$this->free();
if($stat)
$rtval=1;
}
else
$this->error="impossible d'avancer le resultat, pas d'id de res !";
return($rtval);
}
// ===============================================================================
// pour avancer d'un élément dans le résultset
function previous_record()
{
$rtval=0;
if($this->query_id!=-1)
{ // si il y a un index de resultat
$this->record=@mysql_fetch_array($this->query_id);
$this->row=$this->row - 1;
// test validite
$stat=is_array($this->record);
if(!$stat && $this->auto_free)
$this->free();
if($stat)
$rtval=1;
}
else
$this->error="impossible d'avancer le resultat, pas d'id de res !";
return($rtval);
}
// ===============================================================================
// pour positionner le pointeur interne du résultset à l'endroit désiré
function seek($pos=0)
{
$rtval=-1;
if(@mysql_data_seek($this->query_id, $pos)!=false)
{
$this->row=$pos;
$rtval=$pos;
}
return($rtval);
}
// retourne le nombre de lignes dans le recordset
// (uniquement après un select)
function num_rows()
{
return(@mysql_num_rows($this->query_id));
}
// retourne le nombre de champs de l'enregistrement courant
function num_fields()
{
return(@mysql_num_fields($this->query_id));
}
// retourne le nombre de tuples affectés
// (nb de lignes affectées après un insert, update ou delete)
// (!!! : si on fait un delete sur tous les enregistrements -> sans clause where
// alors la fonction renvoie 0)
function affected_rows()
{
return(@mysql_affected_rows($this->link_id));
}
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
// retourne l'élément désiré (indice ou nom du champ) de la ligne courante
function f($col)
{
return($this->record[$col]);
}
// pour afficher l'élémént desire de la ligne courante
function p($col)
{
print $this->record[$col];
}
// alias de num_rows()
function nf()
{
return($this->num_rows());
}
// pour afficher le resultat de num_rows()
function np()
{
print $this->num_rows();
}
}
function close()
{
@mysql_close();
}
?> |
Partager