39,73 → 39,25 |
* @param unknown_type $requete |
*/ |
public function requeter($requete, $retour = self::SQL_RETOUR_COMPLET, $mode = PDO::FETCH_ASSOC) { |
$requete = $this->protegerRequete($requete); |
return $this->executerRequete($requete, $retour, $mode); |
} |
|
/** |
* Protège automatiquement toutes les chaines comprises entre deux caractères '|'. |
* @see protegerRequete() |
* @param unknown_type $requete |
* Execute la requete retournant une seule ligne de résultat. |
* @param String $requete |
*/ |
public function executer($requete) { |
$requete = $this->protegerRequete($requete); |
return $this->executerRequeteSimple($requete); |
public function requeterLigne($requete, $mode = PDO::FETCH_ASSOC) { |
return $this->executerRequete($requete, self::SQL_RETOUR_LIGNE, $mode); |
} |
|
/** |
* 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 |
* Execute la requete retournant une seule colone de résultat. |
* @param String $requete |
*/ |
public function protegerRequete($requete) { |
if (substr_count($requete, '|') % 2 === 0) { |
if (preg_match_all('/\|([^|]*)\|/', $requete, $correspondances, PREG_SET_ORDER)) { |
foreach ($correspondances as $chaine) { |
$chaine_protegee = $this->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; |
public function requeterValeurUnique($requete, $mode = PDO::FETCH_ASSOC) { |
return $this->executerRequete($requete, self::SQL_RETOUR_COLONNE, $mode); |
} |
|
|
public function proteger($chaine) { |
return $this->quote($chaine); |
} |
|
public function protegerTableau(Array $tableau) { |
foreach ($tableau as $id => $val) { |
if (is_array($val)) { |
$tableau[$id] = $this->protegerTableau($val); |
} else { |
$tableau[$id] = $this->proteger($val); |
} |
} |
return $tableau; |
} |
|
public function executerRequeteSimple($requete) { |
$resultat = false; |
try { |
$resultat = $this->exec($requete); |
if ($resultat === false) { |
$this->debug[] = "La requête a échoué : $requete"; |
} |
} catch (PDOException $e) { |
$message = "Fichier : {$e->getFile()} \nLigne : {$e->getLine()} \nMessage : {$e->getMessage()} \nRequête : $requete"; |
$code = E_USER_ERROR; |
throw new Exception($message, $code); |
} |
return $resultat; |
} |
|
public function executerRequete($requete, $retour = self::SQL_RETOUR_COMPLET, $mode = PDO::FETCH_ASSOC) { |
$resultat = false; |
try { |
129,21 → 81,60 |
$this->debug[] = "La requête a retourné aucun résultat : $requete"; |
} |
} catch (PDOException $e) { |
$this->debug[] = sprintf($this->getTxt('sql_erreur_requete'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete); |
$msgTpl = "Requête echec.\nFichier : %s.\nLigne : %s.\nMessage : %s.\nRequête : %s"; |
$this->debug[] = sprintf($msgTpl, $e->getFile(), $e->getLine(), $e->getMessage(), $requete); |
} |
return $resultat; |
} |
|
public function getTxt($id) { |
$sortie = ''; |
switch ($id) { |
case 'sql_erreur' : $sortie = 'Requête echec. Fichier : "%s". Ligne : "%s". Message : %s'; break; |
case 'sql_erreur_requete' : $sortie = "Requête echec.\nFichier : %s.\nLigne : %s.\nMessage : %s.\nRequête : %s"; break; |
default : $sortie = $id; |
/** |
* Execute la requete retournant l'objet brut de résultat pour l'utiliser dans un foreach. |
* @param String $requete |
*/ |
public function requeterBrut($requete) { |
return $this->executerRequete($requete, self::SQL_RETOUR_BRUT); |
} |
|
/** |
* Protège automatiquement toutes les chaines comprises entre deux caractères '|'. |
* @see protegerRequete() |
* @param unknown_type $requete |
*/ |
public function executer($requete) { |
$resultat = false; |
try { |
$resultat = $this->exec($requete); |
if ($resultat === false) { |
$this->debug[] = "La requête a échoué : $requete"; |
} |
} catch (PDOException $e) { |
$message = "Fichier : {$e->getFile()} \nLigne : {$e->getLine()} \nMessage : {$e->getMessage()} \nRequête : $requete"; |
$code = E_USER_ERROR; |
throw new Exception($message, $code); |
} |
return $sortie; |
return $resultat; |
} |
|
|
public function proteger($donnees) { |
if (is_array($donnees)) { |
$retour = $this->protegerTableau($donnees); |
} else { |
$retour = $this->quote($donnees); |
} |
return $retour; |
} |
|
private function protegerTableau(Array $tableau) { |
foreach ($tableau as $id => $val) { |
if (is_array($val)) { |
$tableau[$id] = $this->protegerTableau($val); |
} else { |
$tableau[$id] = $this->proteger($val); |
} |
} |
return $tableau; |
} |
|
public function obtenirDernierId() { |
return $this->lastInsertId(); |
} |