+++ /dev/null
-<?php
-
- class mw_pdo_sqlite extends mw_sgbd{
-
- public function name(){
- return "PDO SQLite";
- }
-
- public function default_params(){
- return array(
- "host" => "content/data/sqlite",
- "base" => "mtweb.db",
- "user" => "",
- "password" => ""
- );
- }
-
- public function validate_extention(){
- return extension_loaded("pdo") && extension_loaded("pdo_sqlite");
- }
-
- public function authentication_required(){
- return false;
- }
-
- public 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;
- }
-
- public function select_db($db_name){\r
- $this->base = $db_name;\r
- return $this->connect($this->host, $this->base, $this->user, $this->password);\r
- }
-
- public function desc_table($table_name){
- $table_name = $this->replace_prefixes($table_name);
- if(strpos($table_name, "'") !== false){
- throw new Exception($this->exception_out("nom de table avec un simple quote"));
- }
- $desc = array(
- "name" => $table_name,
- "attributs" => array()
- );
- $sql = "PRAGMA table_info(".$table_name.")";
- try{
- $rst = $this->query($sql);
- while($v_rst = $this->fetch_assoc($rst)){
- $desc["attributs"][$v_rst["name"]] = array(
- "name" => $v_rst["name"],
- "prymary_key" => isset($v_rst["pk"]) && $v_rst["pk"] ? true : false
- );
- }
- $this->free_result($rst);
- }
- catch(Exception $e){
- throw new Exception($this->exception_out("impossible de lire les champs de la table ".$table_name));
- }
- return $desc;
- }
-
- public function table_exists($table_name){
- $table_name = $this->replace_prefixes($table_name);
- if(!$this->link) $this->connect($this->host, $this->base, $this->user, $this->password);\r
- $EXISTS = false;
- try{
- $rst = $this->query("SELECT name FROM sqlite_master WHERE type='table'");
- 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
- }
-
- public function field_exists($table_name, $field_name){
- $table_name = $this->replace_prefixes($table_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;
- }
-
- public function query($query_string){
- $query_string = $this->replace_prefixes($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
- }
-
- public 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;
- }
-
- public 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;
- }
-
- public 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;
- }
-
- public function close(){
- $this->link = null;
- return true;
- }
-
- public function exception_out($message){\r
- return "[erreur] sqlite : ".$message;\r
- }
-
- }