13,6 → 13,11 |
abstract class Cel { |
const TYPE_OBS = 'observation'; |
const TYPE_IMG = 'image'; |
const SQL_MODE_ASSOC = PDO::FETCH_ASSOC; |
const SQL_RETOUR_COMPLET = 'All'; |
const SQL_RETOUR_LIGNE = 'Row'; |
const SQL_RETOUR_COLONNE = 'Column'; |
const SQL_RETOUR_BRUT = 'Raw'; |
|
public $config; |
private $ressources; |
58,21 → 63,63 |
return $PDO; |
} |
|
protected function executerRequete($requete, $retour = 'All', $mode = PDO::FETCH_ASSOC) { |
/** |
* Protège automatiquement toutes les chaines comprises entre deux caractères '|'. |
* Puis execute la requete. |
* @see protegerRequete() |
* @param unknown_type $requete |
*/ |
protected function requeter($requete, $retour = self::SQL_RETOUR_COMPLET, $mode = PDO::FETCH_ASSOC) { |
$requete = $this->protegerRequete($requete); |
return $this->executerRequete($requete); |
} |
|
/** |
* Protège automatiquement toutes les chaines comprises entre deux caractères '|'. |
* @see protegerRequete() |
* @param unknown_type $requete |
*/ |
protected function executer($requete) { |
$requete = $this->protegerRequete($requete); |
return $this->executerRequeteSimple($requete); |
} |
|
/** |
* Méthode permettant de rechercher dans une requete SQL sous forme de chaine (String) les chaines |
* à protéger. Cela évite de protéger chaque variable avant de l'insérer dans une requete SQL. |
* Par contre, il est important que les chaine à protéger ne contiennent pas le caractère '|'. |
* |
* @param $requete |
*/ |
protected function protegerRequete($requete) { |
if (substr_count($requete, '|') % 2 === 0) { |
if (preg_match_all('/\|([^|]*)\|/', $requete, $correspondances, PREG_SET_ORDER)) { |
print_r($correspondances); |
foreach ($correspondances as $chaine) { |
$chaine_protegee = $this->bdd->quote($chaine[1]); |
$requete = str_replace($chaine[0], $chaine_protegee, $requete); |
} |
} |
} else { |
$this->messages[] = "La requête a protéger contient un nombre impair de caractère de protection '|'."; |
$requete = false; |
} |
return $requete; |
} |
|
protected function proteger($chaine) { |
return $this->bdd->quote($chaine); |
} |
|
/** |
* @deprecated utiliser executer() à la place |
* @see executer() |
*/ |
protected function executerRequeteSimple($requete) { |
try { |
switch ($retour) { |
case 'All' : |
$resultat = $this->bdd->query($requete)->fetchAll($mode); |
break; |
case 'Column' : |
$resultat = $this->bdd->query($requete)->fetchColumn(); |
break; |
default: |
$resultat = false; |
$this->messages[] = "Le type de retour '$retour' est inconnu."; |
} |
$resultat = $this->bdd->exec($requete); |
if ($resultat === false) { |
$this->messages[] = "La requête a retourné aucun résultat."; |
$this->messages[] = "La requête a échoué."; |
} |
} catch (PDOException $e) { |
$this->messages[] = sprintf($this->getTxt('sql_erreur_requete'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete); |
80,10 → 127,29 |
return $resultat; |
} |
|
protected function executerRequeteSimple($requete) { |
/** |
* @deprecated utiliser requeter() à la place |
* @see requeter() |
*/ |
protected function executerRequete($requete, $retour = self::SQL_RETOUR_COMPLET, $mode = PDO::FETCH_ASSOC) { |
try { |
$resultat = false; |
$resultat = $this->bdd->query($requete); |
switch ($retour) { |
case self::SQL_RETOUR_COMPLET : |
$resultat = $this->bdd->query($requete)->fetchAll($mode);// Retourne toutes les lignes |
break; |
case self::SQL_RETOUR_LIGNE : |
$resultat = $this->bdd->query($requete)->fetch($mode);// Retourne la première ligne |
break; |
case self::SQL_RETOUR_COLONNE : |
$resultat = $this->bdd->query($requete)->fetchColumn();// Retourne la première colonne de la première ligne |
break; |
case self::SQL_RETOUR_BRUT : |
$resultat = $this->bdd->query($requete);// Retourne l'objet brut pour être utilisé dans une boucle de type foreach |
break; |
default: |
$resultat = false; |
$this->messages[] = "Le type de retour '$retour' est inconnu."; |
} |
if ($resultat === false) { |
$this->messages[] = "La requête a retourné aucun résultat."; |
} |
92,10 → 158,6 |
} |
return $resultat; |
} |
|
protected function proteger($chaine) { |
return $this->bdd->quote($chaine); |
} |
|
protected function getTxt($id) { |
$sortie = ''; |