X-Git-Url: http://git.dj3c1t.com/?a=blobdiff_plain;f=mw%2Fapp%2Fdata%2Fimpl%2Fmw_pdo_sqlite.php;fp=mw%2Fapp%2Fdata%2Fimpl%2Fmw_pdo_sqlite.php;h=4ef1696ed51ff755af7b0c6e61fa02c2241feb9e;hb=0ada6496e6c552c473a5816734b38896ccdd345b;hp=0000000000000000000000000000000000000000;hpb=c8731e3a31f51a93cfff9fe7206dd6fb007bc733;p=mtweb diff --git a/mw/app/data/impl/mw_pdo_sqlite.php b/mw/app/data/impl/mw_pdo_sqlite.php new file mode 100644 index 0000000..4ef1696 --- /dev/null +++ b/mw/app/data/impl/mw_pdo_sqlite.php @@ -0,0 +1,173 @@ +link; + } + + function extention_ok(&$env) { return $this->EXTENTION_OK; } + + function authentication_required() { return false; } + + function sgbd_name() { return "PDO SQLite"; } + + function mw_pdo_sqlite($params = array()){ + $this->host = isset($params["host"]) ? $params["host"] : "content/data/sqlite"; + $this->base = isset($params["base"]) ? $params["base"] : "mtweb.db"; + $this->user = isset($params["user"]) ? $params["user"] : ""; + $this->password = isset($params["password"]) ? $params["password"] : ""; + $this->EXTENTION_OK = (extension_loaded("pdo") && extension_loaded("pdo_sqlite")); + } + + function connect($host, $base, $user, $password){ + if($host) $host .= substr($host, -1) != "/" ? "/" : ""; + try{ + $this->link = null; + $this->link = new PDO("sqlite:".$host.$base); + $this->link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + $this->link->query("PRAGMA encoding = 'UTF-8'"); + } + catch(PDOException $e){ + throw new Exception($this->exception_out("Impossible d'etablir une connection au serveur")); + } + return true; + } + + function select_db($db_name){ + $this->base = $db_name; + return $this->connect($this->host, $this->base, $this->user, $this->password); + } + + 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; + } + + function table_exists($table_name){ + if(!$this->link) $this->connect($this->host, $this->base, $this->user, $this->password); + $EXISTS = false; + try{ + $rst = $this->query("SELECT name FROM sqlite_master WHERE type='table'"); + while($v_rst = $rst->fetch()){ + 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; + } + + 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; + } + + function query($query_string){ + if(!$this->link) $this->connect($this->host, $this->base, $this->user, $this->password); + if(!($result = $this->link->query($query_string))){ + throw new Exception($this->exception_out("Syntaxe invalide dans une requete")); + } + return $result; + } + + 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){ + return "[erreur] sqlite : ".$message; + } + + } + +?> \ No newline at end of file