Last active
December 5, 2016 16:23
-
-
Save igoralves1/ad6ff439e0b4e36fa1b4db3deccdb854 to your computer and use it in GitHub Desktop.
PHP - SATIC Data base Object. PDO - Mysql
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
//This class creates a connection with the databse and generates log files | |
class db { | |
public static $dsn; | |
public static $username; | |
public static $password; | |
public static $db; | |
public static $conn; | |
public static $arrConnAttr;//Array of connection attributes. Ex: ["PDO::ATTR_ERRMODE", "PDO::ERRMODE_EXCEPTION"] | |
public static $pathErroLog;//Path to save the erro log files. Ex:$_SERVER['DOCUMENT_ROOT'] . "/myDirRootProject/LogError" | |
public static $arrCatchConnResult;//Path to save the erro log files. Ex:$_SERVER['DOCUMENT_ROOT'] . "/myDirRootProject/LogError" | |
public static $die;//If we set $setValues["die"]=NULL, during the object initialization, errors will not stop the process. | |
public static $sql; | |
private static function init(array $setValues=NULL) { | |
$arrInitDefault["dsn"]="localhost"; | |
$arrInitDefault["username"]= "root"; | |
$arrInitDefault["password"]=""; | |
$arrInitDefault["db"]="drset2014"; | |
$arrInitDefault["arrConnAttr"]= ["PDO::ATTR_ERRMODE"," PDO::ERRMODE_EXCEPTION"]; | |
$arrInitDefault["pathErroLog"]= dirname(__FILE__)."/Log/Error";//Default path to dir. Note: error pathLog can be "/Log/Error/UserName" or "/Log/Error/UserId", etc | |
$arrInitDefault["die"]= TRUE; | |
$arrInitDefault["sql"]= FALSE; | |
//Catch dynamic sit values. | |
if(!is_null($setValues)){ | |
$arrInitDefault= array_merge($arrInitDefault,$setValues); | |
} | |
//After merge, initialaze private variables with result merged $arrValues | |
self::$dsn = $arrInitDefault["dsn"]; | |
self::$username= $arrInitDefault["username"]; | |
self::$password= $arrInitDefault["password"]; | |
self::$db= $arrInitDefault["db"]; | |
self::$arrConnAttr= implode(",", $arrInitDefault["arrConnAttr"]); | |
self::$pathErroLog=$arrInitDefault["pathErroLog"]; | |
self::$die=$arrInitDefault["die"]; | |
//This try and catch is only to estabilish the connection during the initialization | |
try { | |
$dns=self::$dsn; | |
$username=self::$username; | |
$password=self::$password; | |
$db=self::$db; | |
self::$conn= new PDO("mysql:host=$dns; dbname=$db", "$username", "$password");//Now private $conn is a PDO object | |
self::$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); | |
}// End of try | |
catch(PDOException $e){//If had some error. The PDO object ($this->conn) could not be created. Throw an error. | |
self::$arrCatchConnResult = self::saveLogError($e->getMessage());//Save a message in the log file and throw a message | |
$msg=self::$arrCatchConnResult["strToHTML"]; | |
self::$conn=null; | |
if(self::$die){ | |
die($msg); | |
} | |
} | |
} | |
public static function saveLogError($msg=NULL,$sql=NULL) { | |
$sqlErrorStringHTML=""; | |
$year = date("Y"); | |
$month = date("M"); | |
$day = date("d"); | |
$dt = date("d.M.Y_H.i.s"); | |
$pathErroLog= self::$pathErroLog."/".$year."/".$month."/".$day."/"; | |
if (!is_dir($pathErroLog)) { | |
mkdir($pathErroLog,0777,true); | |
}//If is not a dir, create it. | |
$sqlErrorStringTXT=""; | |
$sqlErrorString=""; | |
if(!is_null($sql)){ | |
$sqlErrorStringTXT = "Sql: $sql"; | |
$sqlErrorStringHTML = "<kbd>Sql</kbd>: $sql"; | |
} | |
/////////////// Maybe should be good save errors in database too. | |
$strToTxt=<<<EOF | |
>>>>> Mensagem de erro: <<<<< \n | |
Date: $dt \n | |
Msg: $msg \n | |
$sqlErrorStringTXT \n | |
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> | |
EOF; | |
//Save error message to the file | |
$f=$pathErroLog."$dt.txt"; | |
$myfile = fopen($f, "w") or die("Unable to open file!"); | |
fwrite($myfile, $strToTxt); | |
fclose($myfile); | |
//Create a string to be displayed in the broser | |
$strToHTML=<<<EOF | |
<div class="alert alert-danger" role="alert"> | |
Date: $dt <br/> | |
Msg: <span class="label label-danger">$msg</span><br/> | |
$sqlErrorStringHTML<br/> | |
</div> | |
EOF; | |
$arrCatchConnResult["status"]=0; | |
$arrCatchConnResult["strToTxt"]=$strToTxt; | |
$arrCatchConnResult["strToHTML"]=$strToHTML; | |
return $arrCatchConnResult; | |
}//End of saveLogError() | |
public static function get_values(array $setValues=NULL) { | |
try { | |
self::init($setValues); | |
$stmt = self::$conn->prepare(self::$sql); | |
$stmt->execute(); | |
while ($field = $stmt->fetch(PDO::FETCH_ASSOC)) { | |
$arrResult[]=$field; | |
} | |
return $arrResult; | |
} | |
catch (PDOException $e) { | |
self::$arrCatchConnResult = self::saveLogError($e->getMessage(), self::$sql);//Save a message in the log file and set a message | |
$msg= self::$arrCatchConnResult["strToHTML"]; | |
self::$conn = null; | |
if(self::$die){ | |
die($msg); | |
} | |
} | |
} | |
}//End of class db |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment