summaryrefslogtreecommitdiffstats
path: root/Db.class.php
diff options
context:
space:
mode:
authorIndieteq <admin@indieteq.com>2012-10-17 21:38:56 +0200
committerIndieteq <admin@indieteq.com>2012-10-17 21:38:56 +0200
commitfda5f14b8fefad0a80d01b694ff5621fc0976894 (patch)
treed8654d8c0e9f8493befef1492b4c4d186a67395d /Db.class.php
parent43feb75d2886596d4b358c0830bdd9021c129ef7 (diff)
downloadphp-mysql-pdo-database-class-fda5f14b8fefad0a80d01b694ff5621fc0976894.zip
php-mysql-pdo-database-class-fda5f14b8fefad0a80d01b694ff5621fc0976894.tar.gz
php-mysql-pdo-database-class-fda5f14b8fefad0a80d01b694ff5621fc0976894.tar.bz2
The database files
Diffstat (limited to 'Db.class.php')
-rw-r--r--Db.class.php242
1 files changed, 242 insertions, 0 deletions
diff --git a/Db.class.php b/Db.class.php
new file mode 100644
index 0000000..0798c72
--- /dev/null
+++ b/Db.class.php
@@ -0,0 +1,242 @@
+<?php
+ /* *
+ * DB - A simple database class
+ *
+ * @author Author: Vivek Wicky Aswal. (https://twitter.com/#!/VivekWickyAswal)
+ * @git htt://github.com/indieteq-vivek/simple-db-class
+ * @version 0.2a
+ *
+ */
+ require("Log.class.php");
+ class DB
+ {
+ # @object, The PDO object
+ private $pdo;
+
+ # @object, PDO statement object
+ private $sQuery;
+
+ # @array, The database settings
+ private $settings;
+
+ # @bool , Connected to the database
+ private $bConnected = false;
+
+ # @object, Object for logging exceptions
+ private $log;
+
+ # @array, The parameters of the SQL query
+ private $parameters;
+
+ /**
+ * Default Constructor
+ *
+ * 1. Instantiate Log class.
+ * 2. Connect to database.
+ * 3. Creates the parameter array.
+ */
+ public function __construct()
+ {
+ $this->log = new Log();
+ $this->Connect();
+ $this->parameters = array();
+ }
+
+ /**
+ * This method makes connection to the database.
+ *
+ * 1. Reads the database settings from a ini file.
+ * 2. Puts the ini content into the settings array.
+ * 3. Tries to connect to the database.
+ * 4. If connection failed, exception is displayed and a log file gets created.
+ */
+ private function Connect()
+ {
+ $this->settings = parse_ini_file("settings.ini.php");
+ $dsn = 'mysql:dbname='.$this->settings["dbname"].';host='.$this->settings["host"].'';
+ try
+ {
+ # Read settings from INI file
+ $this->pdo = new PDO($dsn, $this->settings["user"], $this->settings["password"]);
+
+ # We can now log any exceptions on Fatal error.
+ $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+
+ # Disable emulation of prepared statements, use REAL prepared statements instead.
+ $this->pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
+
+ # Connection succeeded, set the boolean to true.
+ $this->bConnected = true;
+ }
+ catch (PDOException $e)
+ {
+ # Write into log
+ echo $this->ExceptionLog($e->getMessage());
+ die();
+ }
+ }
+ /**
+ * Every method which needs to execute a SQL query uses this method.
+ *
+ * 1. If not connected, connect to the database.
+ * 2. Prepare Query.
+ * 3. Parameterize Query.
+ * 4. Execute Query.
+ * 5. On exception : Write Exception into the log + SQL query.
+ * 6. Reset the Parameters.
+ */
+ private function Init($query,$parameters = "")
+ {
+ # Connect to database
+ if(!$this->bConnected) { $this->Connect(); }
+ try {
+ # Prepare query
+ $this->sQuery = $this->pdo->prepare($query);
+
+ # Add parameters to the parameter array
+ $this->bindMore($parameters);
+
+ # Bind parameters
+ if(!empty($this->parameters)) {
+ foreach($this->parameters as $param)
+ {
+ $parameters = explode("\x7F",$param);
+ $this->sQuery->bindParam($parameters[0],$parameters[1]);
+ }
+ }
+
+ # Execute SQL
+ $this->succes = $this->sQuery->execute();
+ }
+ catch(PDOException $e)
+ {
+ # Write into log and display Exception
+ echo $this->ExceptionLog($e->getMessage(),$this->sQuery->queryString);
+ die();
+ }
+
+ # Reset the parameters
+ $this->parameters = array();
+ }
+
+ /**
+ * @void
+ *
+ * Add the parameter to the parameter array
+ * @param string $para
+ * @param string $value
+ */
+ public function bind($para, $value)
+ {
+ $this->parameters[sizeof($this->parameters)] = ":" . $para . "\x7F" . $value;
+ }
+ /**
+ * @void
+ *
+ * Add more parameters to the parameter array
+ * @param array $parray
+ */
+ public function bindMore($parray)
+ {
+ if(empty($this->parameters) && is_array($parray)) {
+ $columns = array_keys($parray);
+ foreach($columns as $i => &$column) {
+ $this->bind($column, $parray[$column]);
+ }
+ }
+ }
+ /**
+ * If the SQL query contains a SELECT statement it returns an array containing all of the result set row
+ * If the SQL statement is a DELETE, INSERT, or UPDATE statement it returns the number of affected rows
+ *
+ * @param string $query
+ * @param array $params
+ * @param int $fetchmode
+ * @return mixed
+ */
+ public function query($query,$params = null,$fetchmode = PDO::FETCH_ASSOC)
+ {
+ $query = trim($query);
+
+ $this->Init($query,$params);
+
+ if (stripos($query, 'select') === 0){
+ return $this->sQuery->fetchAll($fetchmode);
+ }
+ elseif (stripos($query, 'insert') === 0 || stripos($query, 'update') === 0 || stripos($query, 'delete') === 0) {
+ return $this->sQuery->rowCount();
+ }
+ else {
+ return NULL;
+ }
+ }
+ /**
+ * Returns an array which represents a column from the result set
+ *
+ * @param string $query
+ * @param array $params
+ * @return array
+ */
+ public function column($query,$params = null)
+ {
+ $this->Init($query,$params);
+ $Columns = $this->sQuery->fetchAll(PDO::FETCH_NUM);
+
+ $column = null;
+
+ foreach($Columns as $cells) {
+ $column[] = $cells[0];
+ }
+
+ return $column;
+
+ }
+ /**
+ * Returns an array which represents a row from the result set
+ *
+ * @param string $query
+ * @param array $params
+ * @param int $fetchmode
+ * @return array
+ */
+ public function row($query,$params = null,$fetchmode = PDO::FETCH_ASSOC)
+ {
+ $this->Init($query,$params);
+ return $this->sQuery->fetch($fetchmode);
+ }
+ /**
+ * Returns the value of one single field/column
+ *
+ * @param string $query
+ * @param array $params
+ * @return string
+ */
+ public function single($query,$params = null)
+ {
+ $this->Init($query,$params);
+ return $this->sQuery->fetchColumn();
+ }
+ /**
+ * Writes the log and returns the exception
+ *
+ * @param string $message
+ * @param string $sql
+ * @return string
+ */
+ private function ExceptionLog($message , $sql = "")
+ {
+ $exception = 'Unhandled Exception. <br />';
+ $exception .= $message;
+ $exception .= "<br /> You can find the error back in the log.";
+
+ if(!empty($sql)) {
+ # Add the Raw SQL to the Log
+ $message .= "\r\nRaw SQL : " . $sql;
+ }
+ # Write into log
+ $this->log->write($message);
+
+ return $exception;
+ }
+ }
+?> \ No newline at end of file