host = isset($params["host"]) ? $params["host"] : "localhost"; $this->base = isset($params["base"]) ? $params["base"] : "mtweb"; $this->user = isset($params["user"]) ? $params["user"] : ""; $this->password = isset($params["password"]) ? $params["password"] : ""; $this->EXTENTION_OK = function_exists("mysql_connect"); } public function extention_ok(&$env){ return $this->EXTENTION_OK; } public function authentication_required(){ return true; } public function sgbd_name(){ return "MySql"; } public function connect($host, $base, $user, $password){ $this->link = @mysql_connect($host, $user, $password); if(!$this->link) throw new Exception($this->exception_out("Impossible d'etablir une connection au serveur")); @mysql_query("SET NAMES 'utf8'"); if($base){ $connected = @mysql_select_db($base, $this->link); if(!$connected) throw new Exception($this->exception_out("Impossible de selectioner la base ".$base)); } return true; } public function select_db($db_name){ $this->base = $db_name; if(!$this->link) $this->connect($this->host, $this->base, $this->user, $this->password); return $this->query("USE ".$db_name); } public 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)){ $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 ); } $this->free_result($rst); } catch(Exception $e){ throw new Exception($this->exception_out("Impossible de lire la description de la table")); } return $desc; } public function table_exists($table_name){ if(!$this->link) $this->connect($this->host, $this->base, $this->user, $this->password); $EXISTS = false; try{ $rst = $this->query("SHOW TABLES"); while($v_rst = mysql_fetch_row($rst)){ if($v_rst[0] == $table_name){ $EXISTS = true; break; } } $this->free_result($rst); } catch(Exception $e){ throw new Exception($this->exception_out("Impossible de savoir si la table existe")); } return $EXISTS; } public function field_exists($table_name, $field_name){ if(!$this->link) $this->connect($this->host, $this->base, $this->user, $this->password); 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; } public function query($query_string){ if(!$this->link) $this->connect($this->host, $this->base, $this->user, $this->password); $result = @mysql_query($query_string, $this->link); if(!$result) throw new Exception($this->exception_out("Syntaxe invalide dans une requete")); return $result; } public function fetch_assoc($rst){ if($this->link){ if($rst){ return mysql_fetch_assoc($rst); } else throw new Exception($this->exception_out("fetch_assoc sans result handler")); } else throw new Exception($this->exception_out("fetch_assoc sans connexion")); } public function insert_id(){ if($this->link){ return mysql_insert_id($this->link); } else throw new Exception($this->exception_out("insert_id sans connexion")); } public function free_result($rst){ if($this->link){ if($rst){ return mysql_free_result($rst); } else throw new Exception($this->exception_out("free_result sans result handler")); } else throw new Exception($this->exception_out("free_result sans connexion")); } public function close(){ if($this->link) return mysql_close($this->link); return true; } public function exception_out($message){ return "[erreur] mysql : ".$message; } }