+<?php
+
+ class mw_pdo_mysql{
+
+ var $link;
+
+ var $host;
+ var $base;
+ var $user;
+ var $password;
+
+ var $EXTENTION_OK;
+
+ function get_link(){
+ return $this->link;
+ }
+
+ function extention_ok(&$env) { return $this->EXTENTION_OK; }
+
+ function mw_pdo_mysql($host, $base, $user, $password){
+ $this->host = $host;
+ $this->base = $base;
+ $this->user = $user;
+ $this->password = $password;
+ $this->EXTENTION_OK = (extension_loaded("pdo") && extension_loaded("pdo_mysql"));
+ }
+
+ function connect($host, $base, $user, $password){
+ try{
+ $this->link = new PDO("mysql:host=".$host.";dbname=".$base, $user, $password);
+ $this->link->query("SET NAMES 'utf8'");
+ }
+ catch(PDOException $e){
+ throw new Exception($this->exception_out("Impossible d'etablir une connection au serveur"));
+ }
+ return true;
+ }
+
+ function select_db($db_name){\r
+ $this->base = $db_name;\r
+ if(!$this->link) $this->connect($this->host, $this->base, $this->user, $this->password);\r
+ return $this->query("USE ".$db_name);\r
+ }
+
+ function desc_table($table_name){
+ $sql = "SELECT * from information_schema.columns where table_name='".$table_name."'";
+ $rst = $this->query($sql);
+ $desc = array(
+ "name" => $table_name,
+ "attributs" => array()
+ );
+ try{
+ while($v_rst = $this->fetch_assoc($rst)){\r
+ $desc["attributs"][$v_rst["COLUMN_NAME"]] = array(
+ "name" => $v_rst["COLUMN_NAME"],
+ "prymary_key" => $v_rst["COLUMN_KEY"] == "PRI" ? true : false,
+ "auto_increment" => $v_rst["EXTRA"] == "auto_increment" ? true : false
+ );
+ }\r
+ $this->free_result($rst);
+ }
+ catch(Exception $e){
+ throw new Exception($this->exception_out("Impossible de lire la description de la table"));
+ }
+ return $desc;
+ }
+
+ function table_exists($table_name){
+ if(!$this->link) $this->connect($this->host, $this->base, $this->user, $this->password);\r
+ $EXISTS = false;
+ try{
+ $rst = $this->query("SHOW TABLES");
+ while($v_rst = $rst->fetch()){\r
+ if($v_rst[0] == $table_name){
+ $EXISTS = true;
+ break;
+ }\r
+ }\r
+ $this->free_result($rst);
+ }
+ catch(Exception $e){
+ throw new Exception($this->exception_out("Impossible de savoir si la table existe"));
+ }
+ return $EXISTS;\r
+ }
+
+ function field_exists($table_name, $field_name){
+ if(!$this->link) $this->connect($this->host, $this->base, $this->user, $this->password);\r
+ if(!($desc = $this->desc_table($table_name))){
+ throw new Exception($this->exception_out("Impossible de lire la description de la table"));
+ }
+ $EXISTS = false;
+ foreach($desc["attributs"] as $attribut_name => $attribut){
+ if($field_name == $attribut_name){
+ $EXISTS = true;
+ break;
+ }
+ }
+ return $EXISTS;
+ }
+
+ function query($query_string){\r
+ if(!$this->link) $this->connect($this->host, $this->base, $this->user, $this->password);\r
+ if(!($result = $this->link->query($query_string))){
+ throw new Exception($this->exception_out("Syntaxe invalide dans une requete"));
+ }
+ return $result;\r
+ }
+
+ function fetch_assoc($rst){
+ if(!$this->link){
+ throw new Exception($this->exception_out("fetch_assoc sans connexion"));
+ }
+ if(!$rst){
+ throw new Exception($this->exception_out("fetch_assoc sans result handler"));
+ }
+ try{
+ $tuple = $rst->fetch(PDO::FETCH_ASSOC);
+ }
+ catch(Exception $e){
+ throw new Exception($this->exception_out("erreur fetch_assoc"));
+ }
+ return $tuple;
+ }
+
+ function insert_id(){
+ if(!$this->link){
+ throw new Exception($this->exception_out("insert_id sans connexion"));
+ }
+ try{
+ $id = $this->link->lastInsertId();
+ }
+ catch(Exception $e){
+ throw new Exception($this->exception_out("erreur insert_id"));
+ }
+ return $id;
+ }
+
+ function free_result($rst){
+ if(!$this->link){
+ throw new Exception($this->exception_out("free_result sans connexion"));
+ }
+ if(!$rst){
+ throw new Exception($this->exception_out("free_result sans result handler"));
+ }
+ try{
+ $rst->closeCursor();
+ $rst = null;
+ }
+ catch(Exception $e){
+ throw new Exception($this->exception_out("erreur free_result"));
+ }
+ return true;
+ }
+
+ function close(){
+ $this->link = null;
+ return true;
+ }
+
+ function exception_out($message){\r
+ return "[erreur] mysql : ".$message;\r
+ }
+
+ }
+
+?>
\ No newline at end of file