open(__ROOT__.'/'.DB_NAME,$tag); } function __destruct(){ $this->close(); } function sgbdType($type){ $return = false; switch($type){ case 'string': case 'timestamp': case 'date': $return = 'VARCHAR(255)'; break; case 'longstring': $return = 'longtext'; break; case 'key': $return = 'INTEGER NOT NULL PRIMARY KEY'; break; case 'object': case 'integer': $return = 'bigint(20)'; break; case 'boolean': $return = 'INT(1)'; break; default; $return = 'TEXT'; break; } return $return ; } public function closeDatabase(){ $this->close(); } // GESTION SQL /** * Verifie l'existence de la table en base de donnée * @author Valentin CARRUESCO * @category manipulation SQL * @param créé la table si elle n'existe pas * @return true si la table existe, false dans le cas contraire */ public function checkTable($autocreate = false){ $query = 'SELECT count(*) as numRows FROM sqlite_master WHERE type="table" AND name="'.MYSQL_PREFIX.$this->TABLE_NAME.'"'; $statement = $this->query($query); if($statement!=false){ $statement = $statement->fetchArray(); if($statement['numRows']==1){ $return = true; } } if($autocreate && !$return) $this->create(); return $return; } /** * Transforme l'objet en tableau attribut -> valeur * @author Valentin CARRUESCO * @return retourne un array attribut -> valeur correspondant à l'objet */ public function toArray(){ $array = array(); foreach($this->object_fields as $field=>$type) $array[$field] = $this->$field; return $array; } /** * Transforme le tableau fournis en objet, le nommage attribut -> valeur doit être respecté * @author Valentin CARRUESCO * @param tableau contenant les clé/valeur de l'objet * @return retourne un objet attribut -> valeur correspondant à l'array fournis */ public function fromArray($array){ $object = new $this->CLASS_NAME(); foreach($this->object_fields as $field=>$type) $object->$field = $array[$field]; return $object; } /** * Methode de creation de l'entité * @author Valentin CARRUESCO * @category manipulation SQL * @param $debug='false' active le debug mode (0 ou 1) * @return Aucun retour */ public function create($debug='false'){ $query = 'CREATE TABLE IF NOT EXISTS `'.MYSQL_PREFIX.$this->TABLE_NAME.'` ('; $i=false; foreach($this->object_fields as $field=>$type){ if($i){$query .=',';}else{$i=true;} $query .='`'.$field.'` '. $this->sgbdType($type).' NOT NULL'; } $query .= ');'; if($this->debug)echo '
'.$this->CLASS_NAME.' ('.__METHOD__ .') : Requete --> '.$query; if(!$this->exec($query)) echo $this->lastErrorMsg(); } public function drop($debug='false'){ $query = 'DROP TABLE `'.MYSQL_PREFIX.$this->TABLE_NAME.'`;'; if($this->debug)echo '
'.$this->CLASS_NAME.' ('.__METHOD__ .') : Requete --> '.$query; if(!$this->exec($query)) echo $this->lastErrorMsg(); } public function massiveInsert($events,$forceId = false){ $query = 'INSERT INTO `'.MYSQL_PREFIX.$this->TABLE_NAME.'`('; $i=false; foreach($this->object_fields as $field=>$type){ if($type=='key' && !$forceId) continue; if($i){$query .=',';}else{$i=true;} $query .='`'.$field.'`'; } $query .=') select'; $u = false; foreach($events as $event){ if($u){$query .=' union select ';}else{$u=true;} $i=false; foreach($event->object_fields as $field=>$type){ if($type=='key' && !$forceId) continue; if($i){$query .=',';}else{$i=true;} $query .='"'.eval('return htmlentities($event->'.$field.');').'"'; } } $query .=';'; //echo ''.$this->CLASS_NAME.' ('.__METHOD__ .') : Requete --> '.$query.'
'; if(!$this->exec($query)) echo $this->lastErrorMsg().'
'; } /** * Methode d'insertion ou de modifications d'elements de l'entité * @author Valentin CARRUESCO * @category manipulation SQL * @param Aucun * @return Aucun retour */ public function save(){ if(isset($this->id)){ $query = 'UPDATE `'.MYSQL_PREFIX.$this->TABLE_NAME.'`'; $query .= ' SET '; $i = false; foreach($this->object_fields as $field=>$type){ if($i){$query .=',';}else{$i=true;} $id = eval('return htmlentities($this->'.$field.');'); $query .= '`'.$field.'`="'.$id.'"'; } $query .= ' WHERE `id`="'.$this->id.'";'; }else{ $query = 'INSERT INTO `'.MYSQL_PREFIX.$this->TABLE_NAME.'`('; $i=false; foreach($this->object_fields as $field=>$type){ if($type!='key'){ if($i){$query .=',';}else{$i=true;} $query .='`'.$field.'`'; } } $query .=')VALUES('; $i=false; foreach($this->object_fields as $field=>$type){ if($type!='key'){ if($i){$query .=',';}else{$i=true;} $query .='"'.eval('return htmlentities($this->'.$field.');').'"'; } } $query .=');'; } if($this->debug)echo ''.$this->CLASS_NAME.' ('.__METHOD__ .') : Requete --> '.$query.'
'; //var_dump ($query); if(!$this->exec($query)) echo $this->lastErrorMsg().'
'; $this->id = (!isset($this->id)?$this->lastInsertRowID():$this->id); } /** * Méthode de modification d'éléments de l'entité * @author Valentin CARRUESCO * @category manipulation SQL * @param $colonnes=>$valeurs * @param $colonnes (WHERE) =>$valeurs (WHERE) * @param $operation="=" definis le type d'operateur pour la requete select * @param $debug='false' active le debug mode (0 ou 1) * @return Aucun retour */ public function change($columns,$columns2=null,$operation='=',$debug='false'){ $query = 'UPDATE `'.MYSQL_PREFIX.$this->TABLE_NAME.'` SET '; $i=false; foreach ($columns as $column=>$value){ if($i){$query .=',';}else{$i=true;} $query .= '`'.$column.'`="'.$value.'" '; } if($columns2!=null){ $query .=' WHERE '; $i=false; foreach ($columns2 as $column=>$value){ if($i){$query .='AND ';}else{$i=true;} $query .= '`'.$column.'`'.$operation.'"'.$value.'" '; } } //echo '
'.$this->CLASS_NAME.' ('.__METHOD__ .') : Requete --> '.$query.'
'; if(!$this->exec($query)) echo $this->lastErrorMsg(); } /** * Méthode de selection de tous les elements de l'entité * @author Valentin CARRUESCO * @category manipulation SQL * @param $ordre=null * @param $limite=null * @param $debug='false' active le debug mode (0 ou 1) * @return > $Entity */ public function populate($order='null',$limit='null',$debug='false'){ eval('$results = '.$this->CLASS_NAME.'::loadAll(array(),\''.$order.'\','.$limit.',\'=\','.$debug.');'); return $results; } /** * Méthode de selection multiple d'elements de l'entité * @author Valentin CARRUESCO * @category manipulation SQL * @param $colonnes (WHERE) * @param $valeurs (WHERE) * @param $ordre=null * @param $limite=null * @param $operation="=" definis le type d'operateur pour la requete select * @param $debug='false' active le debug mode (0 ou 1) * @return > $Entity */ public function loadAll($columns,$order=null,$limit=null,$operation="=",$debug='false',$selColumn='*'){ $objects = array(); $whereClause = ''; if($columns!=null && sizeof($columns)!=0){ $whereClause .= ' WHERE '; $i = false; foreach($columns as $column=>$value){ if($i){$whereClause .=' AND ';}else{$i=true;} $whereClause .= '`'.$column.'`'.$operation.'"'.$value.'"'; } } $query = 'SELECT '.$selColumn.' FROM `'.MYSQL_PREFIX.$this->TABLE_NAME.'` '.$whereClause.' '; if($order!=null) $query .='ORDER BY '.$order.' '; if($limit!=null) $query .='LIMIT '.$limit.' '; $query .=';'; $execQuery = $this->query($query); if(!$execQuery) echo $this->lastErrorMsg(); while($queryReturn = $execQuery->fetchArray() ){ $object = new $this->CLASS_NAME(); foreach($this->object_fields as $field=>$type) if(isset($queryReturn[$field])) $object->$field= html_entity_decode( addslashes($queryReturn[$field])); $objects[] = $object; unset($object); } return $objects; } public function loadAllOnlyColumn($selColumn,$columns,$order=null,$limit=null,$operation="=",$debug='false'){ eval('$objects = $this->loadAll($columns,\''.$order.'\',\''.$limit.'\',\''.$operation.'\',\''.$debug.'\',\''.$selColumn.'\');'); if(count($objects)==0)$objects = array(); return $objects; } /** * Méthode de selection unique d'élements de l'entité * @author Valentin CARRUESCO * @category manipulation SQL * @param $colonnes (WHERE) * @param $valeurs (WHERE) * @param $operation="=" definis le type d'operateur pour la requete select * @param $debug='false' active le debug mode (0 ou 1) * @return $Entity ou false si aucun objet n'est trouvé en base */ public function load($columns,$operation='=',$debug='false'){ eval('$objects = $this->loadAll($columns,null,\'1\',\''.$operation.'\',\''.$debug.'\');'); if(!isset($objects[0]))$objects[0] = false; return $objects[0]; } /** * Méthode de selection unique d'élements de l'entité * @author Valentin CARRUESCO * @category manipulation SQL * @param $colonnes (WHERE) * @param $valeurs (WHERE) * @param $operation="=" definis le type d'operateur pour la requete select * @param $debug='false' active le debug mode (0 ou 1) * @return $Entity ou false si aucun objet n'est trouvé en base */ public function getById($id,$operation='=',$debug='false'){ return $this->load(array('id'=>$id),$operation,$debug); } /** * Methode de comptage des éléments de l'entité * @author Valentin CARRUESCO * @category manipulation SQL * @param $debug='false' active le debug mode (0 ou 1) * @return nombre de ligne dans l'entité' */ public function rowCount($columns=null) { $whereClause =''; if($columns!=null){ $whereClause = ' WHERE '; $i=false; foreach($columns as $column=>$value){ if($i){$whereClause .=' AND ';}else{$i=true;} $whereClause .= '`'.$column.'`="'.$value.'"'; } } $query = 'SELECT COUNT(id) FROM '.MYSQL_PREFIX.$this->TABLE_NAME.$whereClause; //echo '
'.$this->CLASS_NAME.' ('.__METHOD__ .') : Requete --> '.$query.'
'; $execQuery = $this->querySingle($query); //echo $this->lastErrorMsg(); return (!$execQuery?0:$execQuery); } /** * Méthode de supression d'elements de l'entité * @author Valentin CARRUESCO * @category manipulation SQL * @param $colonnes (WHERE) * @param $valeurs (WHERE) * @param $operation="=" definis le type d'operateur pour la requete select * @param $debug='false' active le debug mode (0 ou 1) * @return Aucun retour */ public function delete($columns,$operation='=',$debug='false',$limit=null){ $whereClause = ''; $i=false; foreach($columns as $column=>$value){ if($i){$whereClause .=' AND ';}else{$i=true;} $whereClause .= '`'.$column.'`'.$operation.'"'.$value.'"'; } $query = 'DELETE FROM `'.MYSQL_PREFIX.$this->TABLE_NAME.'` WHERE '.$whereClause.' '.(isset($limit)?'LIMIT '.$limit:'').';'; //echo '
'.$this->CLASS_NAME.' ('.__METHOD__ .') : Requete --> '.$query.'
'; if(!$this->exec($query)) echo $this->lastErrorMsg(); } public function customExecute($request){ $this->exec($request); } public function customQuery($request){ return $this->query($request); } // ACCESSEURS /** * Méthode de récuperation de l'attribut debug de l'entité * @author Valentin CARRUESCO * @category Accesseur * @param Aucun * @return debug */ public function getDebug(){ return $this->debug; } /** * Méthode de définition de l'attribut debug de l'entité * @author Valentin CARRUESCO * @category Accesseur * @param $debug */ public function setDebug($debug){ $this->debug = $debug; } public function getObject_fields(){ return $this->object_fields; } } ?>