<?php
require_once 'Connexion.php' ;
$bdd = Connexion::getInstance() ;
		
//$bdd->setMode(Connexion::PDO_MODE) ;
Class Entity
{

	
	protected $tableName = "" ;
	protected $pkName = "" ;  // peut etre que cet attribut doit etre une constante
	protected $id ;
	protected $champ ;
	protected $arrayChamp ;//
	protected $arrayBdChamp = array() ;
	protected $foreignKey ;
	protected $foreignKeyArray ;  // un tableau ou un objet du type entity  concern  ce 	 qui  peut permettre des  jointures  l'infini
	protected $foreignKeyEntity ;  //  un objet du type entity  en rlation pere-fils  ce 	 qui  peut permettre des  jointures  l'infini
	protected $bdd ;  //  un objet du type entity  en rlation pere-fils  ce 	 qui  peut permettre des  jointures  l'infini
	const bdMode =  Connexion::PDO_MODE ;
	
	
	
	
	public function __construct()
	{
	
		$this->getMetaData() ;
		//$this->bdd = Connexion::getInstance() ;
		
		//*********************************** dclaration du chemin du repertoire des vues
		
		
	}
	public function getId()
	{
		return $this->id ;
		//*********************************** dclaration du chemin du repertoire des vues
		
		
	}
	public function setId($id)
	{
		$this->id = $id  ;
		//*********************************** dclaration du chemin du repertoire des vues
		
		
	}
	public function getChamp()
	{
		return $this->champ ;
		//*********************************** dclaration du chemin du repertoire des vues
		
		
	}
	public function setChamp($champ)
	{
		$this->champ = $champ ;
		//*********************************** dclaration du chemin du repertoire des vues
		
	}	
	
	
	
	public function getAll() // une fonction query qui s'adapte au mode pdo et au mysql_query
	{
		
		$bdd = Connexion::getInstance() ;
		
		//$bdd->setMode(Connexion::MYSQL_CONNECT_MODE) ;
		//$bdd = new Connexion($dbname,$host,$user,$password) ; // ou encorre
	/*
		$pdo_options[PDO::ATTR_ERRMODE]  = PDO::ERRMODE_EXCEPTIONS ;
		$bdd = new PDO('mysql: host=' . $host . ';dbname='. $dbname ,$user,$password,$pdo_options) ;
		
	*/
		$requeteChaine = 'select * from ' . $this->tableName 	;
		$requete = $bdd->query($requeteChaine) ;
		//$requete = $bdd->mysql_query($requeteChaine) ;
		return  $requete ;
		//return ($bdd->query($requeteChaine))->fetch()  ; // code  esssayer
		
		
	
	}
	
	public function  getSome(array $whereArray,$orderByArray, $desc ,$limit ) // une fonction query qui s'adapte au mode pdo et au mysql_query
	{
		
		
		//$bdd = new Connexion($dbname,$host,$user,$password) ; // ou encorre
	/*
		$pdo_options[PDO::ATTR_ERRMODE]  = PDO::ERRMODE_EXCEPTIONS ;
		$bdd = new PDO('mysql: host=' . $host . ';dbname='. $dbname ,$user,$password,$pdo_options) ;
		
	*/
		$bdd = Connexion::getInstance() ;
		$bdd->setMode(self::bdMode) ;
		
		echo 'le mode au depart est:' . $bdd->getMode()  ;
		
		
		$requeteChaine = 'select * from ' . $this->tableName 	;
		$whereClause ="" ; 
		$orderClause =' ' ;
		$groupClause = ' ' ;
		$i = 1 ;
		foreach($whereArray as $key=>$value)
		{
			$originKey = explode(' ',$key)[0] ;
		
			if($i==1)
			{
				if($this->requireQuote($originKey))
				{
					$whereClause .=  ' where '. $key  . '="' . $value . '"' ;
				}
				else
				{
					$whereClause .=  ' where '. $key  . '=' . $value  ;
				}
				
			}
			else
			{
				if($this->requireQuote($originKey))
				{
					$whereClause .=  ' and  '. $key  . '="' . $value . '"' ;
				}
				else
				{
					$whereClause .=  ' and '. $key  . '=' . $value  ;
				}
				
			}
		
		
			$i++ ;
		}
		
		if($orderByArray != null)
		{
			
			if($desc)
			{
				$orderClause = ' order by '. implode($orderByArray , ',') . ' desc' ;
			}
			else
			{
				$orderClause = ' order by '. implode($orderByArray , ',')  ;
			}

		}
		
		
		
		if($limit !=  null)
		{
			$limitClause = ' limit ' . $limit ;
		}
		else
		{
			$limitClause = '' ;
		}
		
		
		
		$requeteChaine .= $whereClause . $orderClause . $limitClause  ; // la clause where
		
		echo  '<br>voici la chaine:' . $requeteChaine ;
		$bdd->setMode(self::bdMode) ;
		echo 'le mode est :'  . $bdd->getMode() ;
	
		$requete =  $bdd->query($requeteChaine) ;
		return  $requete ;
		//return ($bdd->query($requeteChaine))->fetch()  ; // code  esssayer
		
		
	
	}
	public function  getSomeColsVals(array $columns,array $whereArray,$orderByArray, $desc ,$limit ) // une fonction query qui s'adapte au mode pdo et au mysql_query
	{
		
		$bdd = Connexion::getInstance() ;
		$bdd->setMode(Connexion::PDO_MODE) ;
		//$bdd = new Connexion($dbname,$host,$user,$password) ; // ou encorre
	/*
		$pdo_options[PDO::ATTR_ERRMODE]  = PDO::ERRMODE_EXCEPTIONS ;
		$bdd = new PDO('mysql: host=' . $host . ';dbname='. $dbname ,$user,$password,$pdo_options) ;
		
	*/
		$requeteChaine = 'select  ' 	;
		
		$i = 1 ;
		foreach($columns as $field)
		{
		
			if($i==1)
			{
				
				$requeteChaine .=  $field   ;
				
			}
			else
			{
				 $requeteChaine .=  ',' . $field  ;
				
				
			}
		
		
			$i++ ;
		}
		$requeteChaine .=  ' from ' . $this->tableName ;
		
		$whereClause ="" ; 
		$orderClause =' ' ;
		$groupClause = ' ' ;
		$i = 1 ;
		foreach($whereArray as $key=>$value)
		{
			$originKey = explode(' ',$key)[0] ;
		
			if($i==1)
			{
				if($this->requireQuote($originKey))
				{
					$whereClause .=  ' where '. $key  . '="' . $value . '"' ;
				}
				else
				{
					$whereClause .=  ' where '. $key  . '=' . $value  ;
				}
				
			}
			else
			{
				if($this->requireQuote($originKey))
				{
					$whereClause .=  ' and  '. $key  . '="' . $value . '"' ;
				}
				else
				{
					$whereClause .=  ' and '. $key  . '=' . $value  ;
				}
				
			}
		
		
			$i++ ;
		}
		
		if($orderByArray != null)
		{
			
			if($desc)
			{
				$orderClause = ' order by '. implode($orderByArray , ',') . ' desc' ;
			}
			else
			{
				$orderClause = ' order by '. implode($orderByArray , ',')  ;
			}

		}
		
		
		
		if($limit !=  null)
		{
			$limitClause = ' limit ' . $limit ;
		}
		else
		{
			$limitClause = '' ;
		}
		
		
		
		$requeteChaine .= $whereClause . $orderClause . $limitClause  ; // la clause where
		
		//echo  '<br>voici la chaine:' . $requeteChaine ;
		
		$requete = $bdd->query($requeteChaine) ;
		
		return  $requete ;
		//return ($bdd->query($requeteChaine))->fetch()  ; // code  esssayer
		
		
	
	}
	public function  getSomeHasOneOf(array $whereArray,$orderByArray, $desc ,$limit ) // une fonction query qui s'adapte au mode pdo et au mysql_query
	{
		
		$bdd = Connexion::getInstance() ;
	//	$bdd->setMode(Connexion::MYSQL_CONNECT_MODE) ;
		//$bdd = new Connexion($dbname,$host,$user,$password) ; // ou encorre
	/*
		$pdo_options[PDO::ATTR_ERRMODE]  = PDO::ERRMODE_EXCEPTIONS ;
		$bdd = new PDO('mysql: host=' . $host . ';dbname='. $dbname ,$user,$password,$pdo_options) ;
		
	*/
		$requeteChaine = 'select * from ' . $this->tableName 	;
		$whereClause ="" ; 
		$orderClause =' ' ;
		$groupClause = ' ' ;
		$i = 1 ;
		foreach($whereArray as $key=>$value)
		{
			$originKey = explode(' ',$key)[0] ;
		
			if($i==1)
			{
				if($this->requireQuote($originKey))
				{
					$whereClause .=  ' where '. $key  . '="' . $value . '"' ;
				}
				else
				{
					$whereClause .=  ' where '. $key  . '=' . $value  ;
				}
				
			}
			else
			{
				if($this->requireQuote($originKey))
				{
					$whereClause .=  ' or  '. $key  . '="' . $value . '"' ;
				}
				else
				{
					$whereClause .=  ' or '. $key  . '=' . $value  ;
				}
				
			}
		
		
			$i++ ;
		}
		
		if($orderByArray != null)
		{
			
			if($desc)
			{
				$orderClause = ' order by '. implode($orderByArray , ',') . ' desc' ;
			}
			else
			{
				$orderClause = ' order by '. implode($orderByArray , ',')  ;
			}

		}
		
		
		
		if($limit !=  null)
		{
			$limitClause = ' limit ' . $limit ;
		}
		else
		{
			$limitClause = '' ;
		}
		
		
		
		$requeteChaine .= $whereClause . $orderClause . $limitClause  ; // la clause where
		
		//echo  '<br>voici la chaine:' . $requeteChaine ;
		
		$requete = $bdd->query($requeteChaine) ;
		//echo 'voici le type retourn' . getType($requete) ;
		return  $requete ;
		
		//return ($bdd->query($requeteChaine))->fetch()  ; // code  esssayer
		
		
	
	}
	
	public function getSomeColVal($column,array $whereArray) // une fonction query qui s'adapte au mode pdo et au mysql_query
	{
		
		$bdd = Connexion::getInstance() ;
		//$bdd->setMode(Connexion::MYSQL_CONNECT_MODE) ;
		//$bdd = new Connexion($dbname,$host,$user,$password) ; // ou encorre
	/*
		$pdo_options[PDO::ATTR_ERRMODE]  = PDO::ERRMODE_EXCEPTIONS ;
		$bdd = new PDO('mysql: host=' . $host . ';dbname='. $dbname ,$user,$password,$pdo_options) ;
		
	*/
		$requeteChaine = 'select ' . $column . ' from ' . $this->tableName 	;
		$whereClause ="" ; 
		$i = 1 ;
		foreach($whereArray as $key=>$value)
		{
			$originKey = explode(' ',$key)[0] ;
		
			if($i==1)
			{
				if($this->requireQuote($originKey))
				{
					$whereClause .=  ' where '. $key  . '="' . $value . '"' ;
				}
				else
				{
					$whereClause .=  ' where '. $key  . '=' . $value  ;
				}
				
			}
			else
			{
				if($this->requireQuote($key))
				{
					$whereClause .=  ' and  '. $key  . '="' . $value . '"' ;
				}
				else
				{
					$whereClause .=  ' and '. $key  . '=' . $value  ;
				}
				
			}
		
		
			$i++ ;
		}
		
		$requeteChaine .= $whereClause ; // la clause where
		$requete = $bdd->query($requeteChaine) ;
		return  $requete ;
		//return ($bdd->query($requeteChaine))->fetch()  ; // code  esssayer
		
		
	
	}
	
	
	public function getAllColVal( $column) // une fonction query qui s'adapte au mode pdo et au mysql_query
	{
		$bdd = Connexion::getInstance() ;
		//$bdd->setMode(Connexion::MYSQL_CONNECT_MODE) ;
		//$bdd = new Connexion($dbname,$host,$user,$password) ; // ou encorre
	/*
		$pdo_options[PDO::ATTR_ERRMODE]  = PDO::ERRMODE_EXCEPTIONS ;
		$bdd = new PDO('mysql: host=' . $host . ';dbname='. $dbname ,$user,$password,$pdo_options) ;
		
	*/
		$requeteChaine = 'select ' . $column . ' from ' . $this->tableName 	 ;
		$requete = $bdd->query($requeteChaine) ;
		
		return  $requete ;
	}
	
	
	public function bdCheck($id) // une fonction query qui s'adapte au mode pdo et au mysql_query
	{
		$dbname ='';
		$host ='';
		$user ='' ;
		$password ='';
		$bdd = Connexion::getInstance() ;
		//$bdd->setMode(Connexion::MYSQL_CONNECT_MODE) ;
		//$bdd = new Connexion($dbname,$host,$user,$password) ; // ou encorre
	/*
		$pdo_options[PDO::ATTR_ERRMODE]  = PDO::ERRMODE_EXCEPTIONS ;
		$bdd = new PDO('mysql: host=' . $host . ';dbname='. $dbname ,$user,$password,$pdo_options) ;
		
	*/
		$requeteChaine = 'select * from ' . $this->tableName . ' where ' . $this->pkname .'=' . $id	 ;
		$requete = $bdd->query($requeteChaine) ;
		$reponse = $requete->fetch() ;
		//$reponse = mysql_fetch_array($requete) ;
		return  $reponse ;
		//return ($bdd->query($requeteChaine))->fetch()  ; // code  esssayer
		
		
	
	}
	
	public function selfBdCheck() // une fonction query qui s'adapte au mode pdo et au mysql_query
	{
		$dbname ='';
		$host ='';
		$user ='' ;
		$password ='';
		$bdd = Connexion::getInstance() ;
		//$bdd->setMode(Connexion::MYSQL_CONNECT_MODE) ;
		//$bdd = new Connexion($dbname,$host,$user,$password) ; // ou encorre
	/*
		$pdo_options[PDO::ATTR_ERRMODE]  = PDO::ERRMODE_EXCEPTIONS ;
		$bdd = new PDO('mysql: host=' . $host . ';dbname='. $dbname ,$user,$password,$pdo_options) ;
		
	*/
		$requeteChaine = 'select * from ' . $this->tableName . ' where ' . $this->pkname .'=' . $this->id	;
		$requete = $bdd->query($requeteChaine) ;
		//$reponse = mysql_fetch_array($requete) ;
		$reponse = $requete->fetch() ;
		return  $reponse ;
		//return ($bdd->query($requeteChaine))->fetch()  ; // code  esssayer
		
		
	
	}
	public function bdCheckSecond($id1,$id2) // une fonction query qui s'adapte au mode pdo et au mysql_query
	{
		$dbname ='';
		$host ='';
		$user ='' ;
		$password ='';
		$bdd = Connexion::getInstance() ;
		//$bdd->setMode(Connexion::MYSQL_CONNECT_MODE) ;
		//$bdd = new Connexion($dbname,$host,$user,$password) ; // ou encorre
	/*
		$pdo_options[PDO::ATTR_ERRMODE]  = PDO::ERRMODE_EXCEPTIONS ;
		$bdd = new PDO('mysql: host=' . $host . ';dbname='. $dbname ,$user,$password,$pdo_options) ;
		
	*/
		$requeteChaine = 'select * from ' . $this->tableName . ' where ' . $this->pkname1 .'=' . $id1	. ' and' . $this->pkname2 .'=' . $id2  ;
		$requete = $bdd->query($requeteChaine) ;
		//$reponse = mysql_fetch_array($requete) ;
		$reponse = $requete->fetch() ;
		return  $reponse ;
		//return ($bdd->query($requeteChaine))->fetch()  ; // code  esssayer
		
		
	
	}
	public function selfBdCheckSecond() // une fonction query qui s'adapte au mode pdo et au mysql_query
	{
		$dbname ='';
		$host ='';
		$user ='' ;
		$password ='';
		$bdd = Connexion::getInstance() ;
		//$bdd->setMode(Connexion::MYSQL_CONNECT_MODE) ;
		//$bdd = new Connexion($dbname,$host,$user,$password) ; // ou encorre
	/*
		$pdo_options[PDO::ATTR_ERRMODE]  = PDO::ERRMODE_EXCEPTIONS ;
		$bdd = new PDO('mysql: host=' . $host . ';dbname='. $dbname ,$user,$password,$pdo_options) ;
		
	*/
		$requeteChaine = 'select * from ' . $this->tableName . ' where '. $this->pkname1 .'=' . $this->id1	. ' and' . $this->pkname2 .'=' . $this->id2  ;
		$requete = $bdd->query($requeteChaine) ;
		$reponse = $requete->fetch() ;
		//$reponse = mysql_fetch_array($requete) ;
		return  $reponse ;
		//return ($bdd->query($requeteChaine))->fetch()  ; // code  esssayer
		
		
	
	}
	// ***************mettre une fonction,  qui va dire s'il faut enbtourer dans  la requete l'id de l'entit selon qu'il est de type inyt out varchar 
	
	public function selfBdCheckByKey($key,$value) // une fonction query qui s'adapte au mode pdo et au mysql_query
	{
		$dbname ='';
		$host ='';
		$user ='' ;
		$password ='';
		$bdd = Connexion::getInstance() ;
		//$bdd->setMode(Connexion::MYSQL_CONNECT_MODE) ;
		//$bdd = new Connexion($dbname,$host,$user,$password) ; // ou encorre
	/*
		$pdo_options[PDO::ATTR_ERRMODE]  = PDO::ERRMODE_EXCEPTIONS ;
		$bdd = new PDO('mysql: host=' . $host . ';dbname='. $dbname ,$user,$password,$pdo_options) ;
		
	*/
	// a  utiliser car il faut tenir compte des accolades pour la construction de la chaine
		$requeteChaine = 'select * from ' . $this->tableName . ' where '. $key .'=' . $value	  ;
		if($this->requireQuote($key))
		{
			$requeteChaine = 'select * from ' . $this->tableName . ' where ' .$key .'="' . $value . '"'	  ;
		}
		else
		{
			$requeteChaine = 'select * from ' . $this->tableName . ' where '. $key .'=' . $value	  ;
		}
		$requete = $bdd->query($requeteChaine) ;
		$reponse = $requete->fetch() ;
		//$reponse = mysql_fetch_array($requete) ;
		return  $reponse ;
		//return ($bdd->query($requeteChaine))->fetch()  ; // code  esssayer
		
		
	
	}
	
	public function bdHydrate($id) // une fonction query qui s'adapte au mode pdo et au mysql_query
	{
		$dbname ='';
		$host ='';
		$user ='' ;
		$password ='';
		$bdd = Connexion::getInstance() ;
		//$bdd->setMode(Connexion::MYSQL_CONNECT_MODE) ;
		//$bdd = new Connexion($dbname,$host,$user,$password) ; // ou encorre
	/*
		$pdo_options[PDO::ATTR_ERRMODE]  = PDO::ERRMODE_EXCEPTIONS ;
		$bdd = new PDO('mysql: host=' . $host . ';dbname='. $dbname ,$user,$password,$pdo_options) ;
		
	*/
		if($this->requireQuote($this->pkName))
		{
			$requeteChaine = 'select * from ' . $this->tableName . ' where ' . $this->pkname .'="' . $id	 . '"'  ;	

		}
		else
		{
			$requeteChaine = 'select * from ' . $this->tableName . ' where ' . $this->pkname .'=' . $id	  ;	

		}
				$requete = $bdd->query($requeteChaine) ;
		if($reponse =  $requete->fetch())
		//if( mysql_num_rows($requete)>0)
		{
			$this->id = $reponse[tableMatch('id')] ;
			$this->champ = $reponse[tableMatch('champ')] ;
			
			
			//$this->champ1 = $reponse[tableMatch('champ1')] ;
			//$this->champ1 = $reponse[tableMatch('champ1')] ;
			//$this->champ1 = $reponse[tableMatch('champ1')] ;
			//$this->champ1 = $reponse[tableMatch('champ1')] ;
			return true ;
		}
		return  false ;
		
		
	
	}
	public function selfBdHydrate() // une fonction query qui s'adapte au mode pdo et au mysql_query
	{
		$dbname ='';
		$host ='';
		$user ='' ;
		$password ='';
		$bdd = Connexion::getInstance() ;
	//	$bdd->setMode(Connexion::MYSQL_CONNECT_MODE) ;
		//$bdd = new Connexion($dbname,$host,$user,$password) ; // ou encorre
	/*
		$pdo_options[PDO::ATTR_ERRMODE]  = PDO::ERRMODE_EXCEPTIONS ;
		$bdd = new PDO('mysql: host=' . $host . ';dbname='. $dbname ,$user,$password,$pdo_options) ;
		
	*/
	
		if($this->requireQuote($this->pkName))
		{
			$requeteChaine = 'select * from ' . $this->tableName . ' where ' . $this->pkname . '="' . $this->id	 . '"'  ;

		
		}
		else
		{
			$requeteChaine = 'select * from ' . $this->tableName . ' where ' . $this->pkname . '=' . $this->id	  ;

		}
				$requete = $bdd->query($requeteChaine) ;
		if($reponse =  $requete->fetch())
		//if( mysql_num_rows($requete)>0)
		{
			$this->id = $reponse[tableMatch('id')] ;
			$this->champ = $reponse[tableMatch('champ')] ;
			
			
			//$this->champ1 = $reponse[tableMatch('champ1')] ;
			//$this->champ1 = $reponse[tableMatch('champ1')] ;
			//$this->champ1 = $reponse[tableMatch('champ1')] ;
			//$this->champ1 = $reponse[tableMatch('champ1')] ;
			return true ;
		}
		return  false ;
		
		
		
	
	}
	// ***************mettre une fonction,  qui va dire s'il faut enbtourer dans  la requete l'id de l'entit selon qu'il est de type inyt out varchar 
	public function bdJoinHydrate() // une fonction query qui s'adapte au mode pdo et au mysql_query
	{
		$nombreTable = 3;
		$foreignKey1 = "" ;
		$foreignKey2 = "" ;
		$foreignKey3 = "" ;
		$foreignKey4 = "" ;
		
		//$requeteChaine = "select * from " . $table1 . ',' . $table2 . ',' . $table3 . ' where ' . $table1 . '.' . $foreignKey1 . '=' . $table2 . '.' . $primaryKey2 . 'and ' . $table2 . '.' . $foreignKey2 . '=' . $table3 . '.' . $primaryKey3   ;
		
	}

	public function selfBdJoinHydrate() // une fonction query qui s'adapte au mode pdo et au mysql_query
	{
	
	}
	
	
	private static function tableMatch($champ) 
	{
		
	}
	
	
	
	public function bdInsert(array $donnees) // une fonction query qui s'adapte au mode pdo et au mysql_query
	{
	
	
		$bdd = Connexion::getInstance() ;
		//$bdd->setMode(Connexion::MYSQL_CONNECT_MODE) ;
		$i = 1 ;
		$ordreChaine = 'insert into ' . $this->tableName . '(' ;
		$valeurs = 'values('  ;
		foreach($donnees as $key=>$value)
		{
			
			if($i==1)
			{
				$ordreChaine .= $key  ;
				if($this->requireQuote($key))
				{
						
						
					$valeurs .= '"' . $value . '"' ; 
					
					
				}
				else
				{
				
					 
					$valeurs .= $value ;
				
				}
				
			
			}
			else
			{
				$ordreChaine .=  ',' . $key   ;
				if($this->requireQuote($key))
				{
						
				
						$valeurs .= ',"' . $value . '"' ; 
				}
				else
				{
				
					 
					$valeurs .= ',' . $value ;
				
				}
				
			}
			
			$i++ ;
		}
		
		$ordreChaine .= ')' ;
		$valeurs .= ')' ;
		$ordreChaine .= $valeurs ;
		echo 'voici la requete:' . $ordreChaine ; 
		$bdd->exec($ordreChaine) ;
	}
	
	public function bdUpdate(array $donnees,array $whereArray) // une fonction query qui s'adapte au mode pdo et au mysql_query
	{
	
	
		$bdd = Connexion::getInstance() ;
		//$bdd->setMode(Connexion::MYSQL_CONNECT_MODE) ;
		$i = 1 ;
		$ordreChaine = 'update ' . $this->tableName . ' set ' ;
		$valeurs = 'values('  ;
		foreach($donnees as $key=>$value)
		{
			$originKey = explode(' ',$key)[0] ;
			
			if($i==1)
			{
				$ordreChaine .= $key . '=' ;
				if($this->requireQuote($originKey))
				{
						
						
					$ordreChaine .= '"' . $value . '"' ; 
					
					
				}
				else
				{
				
					 
					$ordreChaine .= $value ;
				
				}
				
			
			}
			else
			{
				$ordreChaine .=  ',' . $key  . '=' ;
				if($this->requireQuote($originKey))
				{
						
				
						$ordreChaine .= '"' . $value . '"' ; 
				}
				else
				{
				
					 
					$ordreChaine .= '' . $value ;
				
				}
				
			}
			
			$i++ ;
		}
		
		$whereClause ="" ; 
		$i = 1 ;
		foreach($whereArray as $key=>$value)
		{
			$originKey = explode(' ',$key)[0] ;
			if($i==1)
			{
				if($this->requireQuote($originKey))
				{
					$whereClause .=  ' where '. $key  . '="' . $value . '"' ;
				}
				else
				{
					$whereClause .=  ' where '. $key  . '=' . $value  ;
				}
				
			}
			else
			{
				if($this->requireQuote($originKey))
				{
					$whereClause .=  ' and  '. $key  . '="' . $value . '"' ;
				}
				else
				{
					$whereClause .=  ' and '. $key  . '=' . $value  ;
				}
				
			}
		
		
			$i++ ;
		}
		
		$ordreChaine .= $whereClause ; // la clause where
		
		//echo 'contenu de chaine update:' . $ordreChaine ;
		$bdd->exec($ordreChaine) ;
	}
	
	public function bdDelete(array $whereArray) // une fonction query qui s'adapte au mode pdo et au mysql_query
	{
	
	
		$bdd = Connexion::getInstance() ;
		//$bdd->setMode(Connexion::MYSQL_CONNECT_MODE) ;
		
		$ordreChaine = 'delete from ' . $this->tableName . ' ' ;
		$whereClause ="" ; 
		$i = 1 ;
		foreach($whereArray as $key=>$value) // 
		{
			$originKey = explode(' ',$key)[0] ;
			if($i==1)
			{
				if($this->requireQuote($originKey))
				{
					$whereClause .=  ' where '. $key  . '="' . $value . '"' ;
				}
				else
				{
					$whereClause .=  ' where '. $key  . '=' . $value  ;
				}
				
			}
			else
			{
				if($this->requireQuote($originKey))
				{
					$whereClause .=  ' and  '. $key  . '="' . $value . '"' ;
				}
				else
				{
					$whereClause .=  ' and '. $key  . '=' . $value  ;
				}
				
			}
		
		
			$i++ ;
		}
		
		$ordreChaine .= $whereClause ; // la clause where
		
		//echo 'voici la chaine:' . $ordreChaine;
		
		$bdd->exec($ordreChaine) ;
	
	}
	public  function getMetaData() // une fonction query qui s'adapte au mode pdo et au mysql_query
	{
			$bdd = Connexion::getInstance() ;
			//$bdd->setMode(Connexion::MYSQL_CONNECT_MODE) ;
			$requeteChaine = 'describe ' . $this->tableName ;
		
			$this->arrayBdChamp =  $bdd->query($requeteChaine) ;
			
			
			
			
	}
	
	
	private function requireQuote($champ)
	{
		$this->getMetaData() ;
		
		$listeChamp = new PDOStatement() ;
	$listeChamp = $this->arrayBdChamp ;
	
		while($colonne = $listeChamp->fetch())
		
		//while($colonne = mysql_fetch_array( $listeChamp))
		{
			
				if($colonne['Field'] == $champ)
				{
					
					
					if(preg_match("#varchar#" ,$colonne['Type']) || preg_match("#date#" ,$colonne['Type'])|| preg_match("#datetime#" ,$colonne['Type'])|| preg_match("#text#" ,$colonne['Type']))
					{
						
						return true ;
					}
					else
					{
						return false ;
					}
				}
				
			}
	}
	
	
	
	
	
	

}
?>