verbose = $verbose; } /** * Open a MySQL database * * @param String $host MySQL Server Name * @param String $username MySQL username * @param String $password MySQL password * @param String $nameDB Name of the DataBase */ public function openMYSQL($host, $username, $password, $nameDB){ //Generating PDO params $pdoParams = "mysql:host=".$host.";dbname=".$nameDB; $credentials = array( "username" => $username, "password" => $password ); //Opening DataBase $this->openDB($pdoParams, $credentials); } /** * Open a SQLite DataBase * * @param String $pathToDB The path to SQLITE DB * @return nothing */ public function openSQLite($pathToDB){ //We check the type of file if it exists if(file_exists($pathToDB)){ $finfo = finfo_open(FILEINFO_MIME_TYPE); if(finfo_file($finfo, $pathToDB) != "application/octet-stream"){ exit("Error: Trying to open a " . "non-application/octet-stream type file !"); } } //Generating PDO params $pdoParams = "sqlite:".$pathToDB; //Opening DataBase $this->openDB($pdoParams); } /** * Open a database (generic function) * * Use this for debugging : * $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); * * @param String $pdoParams Informations about the DataBase to open * @param Array $credentials The username and password (optionnal) * @return nothing */ private function openDB($pdoParams, array $credentials = array()){ try{ //We check if any DB is already opened if($this->checkOpenDB()){ //We run into an error throw new Exception("Trying to open a database " . "while another is already opened !"); } //We open DataBase if(count($credentials) == "") $this->db = new PDO($pdoParams); else $this->db = new PDO($pdoParams, $credentials['username'], $credentials['password']); } catch (Exception $e){ exit($this->echoException($e)); } catch(PDOException $e){ exit($this->echoPDOException($e)); } //We set the connected var to yes $this->connected = true; //We set PDO to return errors in verbose mode if($this->verbose) $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } /** * Return the DataBase Object * * @return PDO The DataBase object */ public function getDBobject(){ return $this->db; } /** * Check if another DB is already opened * * @return Boolean True or false depending of the opened state */ private function checkOpenDB(){ if($this->connected){ return true; } //No database opened yet return false; } /** * Execute SQL code to the DataBase * * @param String $sql The SQL to execute * @return Integer Number of lines affected */ public function execSQL($sql){ //We check if any database is opened if (!$this->checkOpenDB()) { return false; } //We try to perform the task try{ return $this->db->exec($sql); } catch (PDOException $e) { exit($this->echoPDOException($e)); } } /** * Add a line to a table of the database * * @param String $tableName The name of the table * @param Array $values The fields values * @return Boolean True or false depending of the success of the operation */ public function addLine($tableName, array $values){ //We try to perform the task try{ //We check if any database is opened if (!$this->checkOpenDB()) { throw new Exception("There isn't any opened DataBase !"); } //Generating SQL command $sql = "INSERT INTO ".$tableName." "; //Adding parametres $valuesDatas = $this->generateSQLfromValuesInsert($values); $sql .= $valuesDatas['sql']; //Preparing insertion $insert = $this->db->prepare($sql); $result = $insert->execute($valuesDatas['params']); //Checking presence of errors if(!$result){ $message = "An error occured while trying to add a line !"; $message .= ($this->verbose ? "\nSQL : ".$sql."" : ""); throw new Exception($message); } //Everything is OK return true; } catch(Exception $e){ exit($this->echoException($e)); } catch(PDOException $e){ exit($this->echoPDOException($e)); } } /** * Add more than one line to a table * * @param String $tableName The name of the table * @param array $values The values of the lines */ public function addLines($tableName, array $values){ //We try to perform the task try{ //We check if any database is opened if (!$this->checkOpenDB()) { throw new Exception("There isn't any opened DataBase !"); } //Processing each line foreach($values as $process){ if(is_array($process)){ if(!$this->addLine($tableName, $process)){ throw new Exception("An error occured while trying to " . "add a line !"); } } else{ throw new Exception("A string has been given instead of an" . " array !"); } } } catch(Exception $e){ exit($this->echoException($e)); } } /** * Generates SQL code for editing DataBase for insert-like SQL commands * * @param array $values The values for the SQL command * @return Array The SQL + the parametres */ private function generateSQLfromValuesInsert(array $values){ //Initialisating vars $sql = "("; $params = array(); //Processing values foreach($values as $name => $value){ //We add a coma if it is not the first value $sql .= ((count($params) != 0) ? ", " : ""); //We add SQL for the name $sql .= $name; //Records the name parameters $params[] = $value; } //Continuing SQL $sql .= ") VALUES ("; //Adding ? for each value for($i = 0; $i $sql, "params" => $params ); //Returning values return $return; } /** * Get datas from a table * * @param String $tableName The name of the table * @param String $conditions The conditions * @param Array $datasCond The values of condition * @param Array $fieldsList Optionnal, specify the fields to select during the request. * @return Array The result */ public function select($tableName, $conditions = "", array $datasCond = array(), array $fieldsList = array()){ //We try to perform the task try{ //We check if any database is opened if (!$this->checkOpenDB()) { throw new Exception("There isn't any opened DataBase !"); } //Process fields to select if(count($fieldsList) == 0) $fields = "*"; else { $fields = implode(", ", $fieldsList); } //Generating SQL $sql = "SELECT ".$fields." FROM ".$tableName." ".$conditions; $selectOBJ = $this->db->prepare($sql); $selectOBJ->execute($datasCond); //Preparing return $return = array(); foreach($selectOBJ as $process){ $result = array(); //Processing datas foreach($process as $name => $data){ //We save the data only if it is not an integer if (!is_int($name)) { $result[$name] = $data; } } //Saving result $return[] = $result; } //Returning result return $return; } catch(Exception $e){ exit($this->echoException($e)); } catch(PDOException $e){ exit($this->echoPDOException($e)); } } /** * Count number of entries matching conditions * * @param String $tableName The name of the table * @param String $conditions The conditions * @param Array $datasCond The values of condition * @return Integer The result */ public function count($tableName, $conditions = "", array $datasCond = array()){ //We try to perform the task try{ //We check if any database is opened if (!$this->checkOpenDB()) { throw new Exception("There isn't any opened DataBase !"); } //Generating SQL $sql = "SELECT COUNT(*) AS resultNumber FROM ".$tableName." ".$conditions; $selectOBJ = $this->db->prepare($sql); $selectOBJ->execute($datasCond); //Preparing return foreach($selectOBJ as $process){ $return = $process; } //Returning result return $return['resultNumber']; } catch(Exception $e){ exit($this->echoException($e)); } catch(PDOException $e){ exit($this->echoPDOException($e)); } } /** * Update a Table * * @param String $tableName The name of the table * @param String $conditions The conditions to limit the edition * @param Array $modifs The modifications * @param Array $whereValues The values of the WHERE condition * @return Boolean Returns true if succeed. */ public function updateDB($tableName, $conditions, array $modifs, array $whereValues){ //We try to perform the task try{ //We check if any database is opened if (!$this->checkOpenDB()) { throw new Exception("There isn't any opened DataBase !"); } //Generating SQL for changes $modifValues = array(); $sqlChange = ""; foreach($modifs as $name=>$value){ $sqlChange .= ($sqlChange != "" ? ", " : "").$name." = ?"; //Saving data $modifValues[] = $value; } //Adding condition values to the liste of query $datasQuery = array_merge_recursive($modifValues, $whereValues); //Generating SQL $sql = "UPDATE ".$tableName." SET ".$sqlChange." WHERE ".$conditions; //Executing SQL $edit = $this->db->prepare($sql); //Trying to perform action if(!$edit->execute($datasQuery)) { $message = "Unable to perform UPDATE SQL !
"; $message .= ($this->verbose ? "\nSQL : ".$sql."" : ""); throw new Exception($message); } //Returns true if succeed return true; } catch(Exception $e){ exit($this->echoException($e)); } catch(PDOException $e){ exit($this->echoPDOException($e)); } } /** * Delete entrie(s) from a table * * @param String $tableName The name of the table * @param String $conditions The conditions to perform action * @param Array $conditionsValues The values of condition * @return Boolean True if succeed */ public function deleteEntry($tableName, $conditions = false, array $conditionsValues = array()) { //We try to perform the task try{ //We check if any database is opened if (!$this->checkOpenDB()) { throw new Exception("There isn't any opened DataBase !"); } //Generating SQL $sql = "DELETE FROM ".$tableName; $sql .= ($conditions ? " WHERE ".$conditions : ""); //Preparing request $delete = $this->db->prepare($sql); //Trying to perform action if(!$delete->execute($conditionsValues)) { $message = "Unable to perform DELETE SQL !
"; $message .= ($this->verbose ? "\nSQL : ".$sql."" : ""); throw new Exception($message); } //Returns true if succeed return true; } catch(Exception $e){ exit($this->echoException($e)); } catch(PDOException $e){ exit($this->echoPDOException($e)); } } /** * Echo an exception * * @param Exception $e The Exception */ private function echoException(Exception $e){ $message = 'Exception in '.$e->getFile().' on line '.$e->getLine().' : '.$e->getMessage(); echo $message; //PDO informations if($this->verbose){ echo "\n PDO last error:"; print_r($this->db->errorInfo()); } } /** * Echo a PDO exception * * @param PDOException $e The PDOException */ private function echoPDOException(PDOException $e){ $message = 'Exception in '.$e->getFile().' on line '.$e->getLine().' : '.$e->getMessage(); echo $message; //PDO informations if($this->verbose){ echo "\n PDO last error:"; print_r($this->db->errorInfo); } } }