Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class MyPDO {
- /**
- * Instance de la classe PDO
- *
- * @var PDO
- * @access private
- */
- private $PDOInstance = null;
- /**
- * Instance de la classe myPDO
- *
- * @var myPDO
- * @access private
- * @static
- */
- private static $instance = null;
- /**
- * Constantes destinées au constructeur de la classe PDO
- *
- * @var string
- */
- private $default_sql_user;
- private $default_sql_host;
- private $default_sql_pass;
- private $default_sql_dtb;
- private $default_sql_prefix;
- private $default_encryption_key;
- const SIMPLE_SELECT = 1;
- const SIMPLE_UPDATE = 2;
- const PREPARED_UPDATE = 3;
- const SIMPLE_INSERT = 4;
- const PREPARED_INSERT = 5;
- const PREPARED_SELECT = 6;
- const INCREMENTAL_UPDATE = 7;
- const UNLOCK = 8;
- const SIMPLE_DELETE = 9;
- const COMPLEX_SELECT = 10;
- /**
- * Constructeur
- *
- * @param void
- * @return void
- * @see PDO::__construct()
- * @access private
- */
- private function __construct() {
- if (ServerUtilities::GAME_STATE == ServerUtilities::GAME_STATE_PRODUCTION) {
- $this->default_sql_user = '';
- $this->default_sql_host = '';
- $this->default_sql_pass = '';
- $this->default_sql_dtb = '';
- $this->default_sql_prefix = 'xgp_';
- $this->default_encryption_key = '';
- } else if (ServerUtilities::GAME_STATE == ServerUtilities::GAME_STATE_LOCAL) {
- $this->default_sql_user = 'root';
- $this->default_sql_host = 'localhost';
- $this->default_sql_pass = '';
- $this->default_sql_dtb = 'orbitronio';
- $this->default_sql_prefix = 'xgp_';
- $this->default_encryption_key = '';
- }
- try {
- $this->PDOInstance = new PDO('mysql:dbname=' . $this->default_sql_dtb . ';host=' . $this->default_sql_host, $this->default_sql_user, $this->default_sql_pass);
- $this->PDOInstance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
- } catch (PDOException $err) {
- message('Fatal error : ' . $err->getMessage());
- }
- }
- /**
- * Crée et retourne l'objet myPDO
- *
- * @access public
- * @static
- * @param void
- * @return myPDO $instance
- */
- public static function getInstance() {
- if (is_null(self::$instance)) {
- self::$instance = new myPDO();
- }
- return self::$instance;
- }
- /*
- * Mapping des méthodes PDO
- *
- * @access public
- * @param string $sMethod
- * @param array $aArguments
- * @return mixed|boolean
- */
- public function __call($sMethod, $aArguments) {
- if (method_exists(get_class($this->PDOInstance), $sMethod)) {
- return call_user_func_array(array($this->PDOInstance, $sMethod), $aArguments);
- }
- return false;
- }
- /**
- * Exécute une requête SQL avec PDO
- *
- * @return PDOStatement Retourne l'objet PDOStatement
- */
- public function query($type, $table, $Values = array(), $Where = array(), $OrderBy = array(), $ASC = true) {
- global $debug;
- $Result = null;
- $Table = $this->default_sql_prefix . $table;
- try {
- switch ($type) {
- case self::SIMPLE_SELECT:
- $Query = self::buildSelectQuery($Table, $Values, $Where, $OrderBy, $ASC);
- $Result = $this->PDOInstance->query($Query);
- break;
- case self::PREPARED_SELECT:
- $Query = self::buildSelectPreparedQuery($Table, $Values, $Where, $OrderBy, $ASC);
- $PreparedQuery = $this->PDOInstance->prepare($Query);
- $Temp = array();
- foreach ($Where as $Clause) {
- $Temp[$Clause['field']] = $Clause['value'];
- }
- $Values = array_merge($Values, $Temp);
- $PreparedQuery->execute($Values);
- $Result = $PreparedQuery;
- break;
- case self::SIMPLE_UPDATE:
- $Query = self::buildUpdateQuery($Values, $Table, $Where);
- $this->PDOInstance->query($Query);
- break;
- case self::PREPARED_UPDATE:
- $Query = self::buildUpdatePreparedQuery($Values, $Table, $Where);
- $PreparedQuery = $this->PDOInstance->prepare($Query);
- $Values = array_merge($Values, $Where);
- $PreparedQuery->execute($Values);
- break;
- case self::SIMPLE_INSERT:
- $Query = self::buildInsertQuery($Values, $Table);
- $this->PDOInstance->query($Query);
- break;
- case self::PREPARED_INSERT:
- $Query = self::buildInsertPreparedQuery($Values, $Table);
- $PreparedQuery = $this->PDOInstance->prepare($Query);
- $Values = array_merge($Values, $Where);
- $PreparedQuery->execute($Values);
- break;
- case self::SIMPLE_DELETE:
- $Query = self::buildDeleteQuery($Where, $Table);
- $this->PDOInstance->query($Query);
- break;
- case self::COMPLEX_SELECT:
- $Query = self::buildComplexSelectQuery($Table, $Values, $Where, $OrderBy, $ASC);
- $Result = $this->PDOInstance->query($Query);
- break;
- case self::INCREMENTAL_UPDATE:
- $Query = self::buildIncrementalUpdateQuery($Values, $Table, $Where);
- $this->PDOInstance->query($Query);
- break;
- }
- } catch (PDOException $err) {
- $debug->error($err->getLine() . ' : ' . $err->getMessage() . "<br />$Query<br />", "SQL Error");
- }
- //Libération mémoire
- unset($Query, $Temp, $Clause, $Values, $Where, $type, $table);
- return $Result;
- }
- public function buildSelectQuery($Table, $Fields = null, $Where = null, $OrderBy = null, $ASC = true) {
- $QryString = 'SELECT ';
- if ($Fields) {
- $TotalFields = sizeof($Fields);
- $CurrentField = 0;
- foreach ($Fields as $field) {
- $CurrentField++;
- if ($CurrentField == $TotalFields) {
- $QryString .= ' ' . $field . ' FROM ' . $Table . ' ';
- } else {
- $QryString .= ' ' . $field . ', ';
- }
- }
- } else {
- $QryString .= '* FROM ' . $Table . ' ';
- }
- if ($Where) {
- $TotalFields = sizeof($Where);
- $CurrentField = 0;
- $QryString .= 'WHERE';
- foreach ($Where as $Clause) {
- $CurrentField++;
- if ($CurrentField == $TotalFields) {
- $QryString .= " `" . $Clause['field'] . "` " . $Clause['type'] . " '" . $Clause['value'] . "' ";
- } else {
- $QryString .= " `" . $Clause['field'] . "` " . $Clause['type'] . " '" . $Clause['value'] . "' AND ";
- }
- }
- }
- if ($OrderBy) {
- $TotalFields = sizeof($OrderBy);
- $CurrentField = 0;
- $QryString .= 'ORDER BY';
- foreach ($OrderBy as $field) {
- $CurrentField++;
- if ($CurrentField == $TotalFields) {
- $QryString .= ' ' . $field;
- } else {
- $QryString .= ' ' . $field . ',';
- }
- }
- if ($ASC) {
- $QryString .= ' ASC;';
- } else {
- $QryString .= ' DESC;';
- }
- }
- return $QryString;
- }
- public function buildSelectPreparedQuery($Table, $Fields = null, $Where = null, $OrderBy = null, $ASC = true) {
- $QryString = 'SELECT ';
- if ($Fields) {
- $TotalFields = sizeof($Fields);
- $CurrentField = 0;
- foreach ($Fields as $field) {
- $CurrentField++;
- if ($CurrentField == $TotalFields) {
- $QryString .= '`' . $field . '` FROM ' . $Table . ' ';
- } else {
- $QryString .= '`' . $field . '`, ';
- }
- }
- } else {
- $QryString .= '* FROM ' . $Table . ' ';
- }
- if ($Where) {
- $TotalFields = sizeof($Where);
- $CurrentField = 0;
- $QryString .= 'WHERE';
- foreach ($Where as $Clause) {
- $CurrentField++;
- if ($CurrentField == $TotalFields) {
- $QryString .= " `" . $Clause['field'] . "` " . $Clause['type'] . " :" . $Clause['field'] . " ";
- } else {
- $QryString .= " `" . $Clause['field'] . "` " . $Clause['type'] . " :" . $Clause['field'] . " AND ";
- }
- }
- }
- if ($OrderBy) {
- $TotalFields = sizeof($OrderBy);
- $CurrentField = 0;
- $QryString .= 'ORDER BY';
- foreach ($OrderBy as $field) {
- $CurrentField++;
- if ($CurrentField == $TotalFields) {
- $QryString .= ' ' . $field;
- } else {
- $QryString .= ' ' . $field . ',';
- }
- }
- if ($ASC) {
- $QryString .= ' ASC;';
- } else {
- $QryString .= ' DESC;';
- }
- }
- return $QryString;
- }
- public function buildComplexSelectQuery($Table, $Fields = null, $Where = null, $OrderBy = null, $ASC = true) {
- $QryString = 'SELECT ';
- $Specials = array('(', ')', 'OR', 'AND');
- if ($Fields) {
- $TotalFields = sizeof($Fields);
- $CurrentField = 0;
- foreach ($Fields as $field) {
- $CurrentField++;
- if ($CurrentField == $TotalFields) {
- $QryString .= '`' . $field . '` FROM ' . $Table . ' ';
- } else {
- $QryString .= '`' . $field . '`, ';
- }
- }
- } else {
- $QryString .= '* FROM ' . $Table . ' ';
- }
- if ($Where) {
- $TotalFields = sizeof($Where);
- $CurrentField = 0;
- $QryString .= 'WHERE';
- foreach ($Where as $Clause) {
- $CurrentField++;
- if (in_array($Clause['field'], $Specials)) {
- $QryString .= ' ' . $Clause['field'] . ' ';
- } else {
- if ($CurrentField == $TotalFields) {
- $QryString .= " `" . $Clause['field'] . "` " . $Clause['type'] . " '" . $Clause['value'] . "' ";
- } else {
- $QryString .= " `" . $Clause['field'] . "` " . $Clause['type'] . " '" . $Clause['value'] . "' " . $Clause['next_op'] . " ";
- }
- }
- }
- }
- if ($OrderBy) {
- $TotalFields = sizeof($OrderBy);
- $CurrentField = 0;
- $QryString .= 'ORDER BY';
- foreach ($OrderBy as $field) {
- $CurrentField++;
- if ($CurrentField == $TotalFields) {
- $QryString .= ' ' . $field;
- } else {
- $QryString .= ' ' . $field . ',';
- }
- }
- if ($ASC) {
- $QryString .= ' ASC;';
- } else {
- $QryString .= ' DESC;';
- }
- }
- return $QryString;
- }
- /**
- * Fonction buildInsertQuery qui retourne une requête SQL INSERT INTO
- * @param array $Values le tableau contenant la liste des champs et valeurs à insérer
- * @param string $Table la table cible
- * @return string $QryString la requête INSERT INTO
- */
- public function buildInsertQuery($Values, $Table) {
- $TotalFields = sizeof($Values);
- $CurrentField = 0;
- $QryString = 'INSERT INTO `' . $Table . '` (';
- foreach ($Values as $field => $value) {
- $CurrentField++;
- if ($CurrentField == $TotalFields) {
- $QryString .= '`' . $field . '` ) VALUES ( ';
- } else {
- $QryString .= '`' . $field . '`, ';
- }
- }
- $CurrentField = 0;
- foreach ($Values as $field => $value) {
- $CurrentField++;
- if ($CurrentField == $TotalFields) {
- $QryString .= '\'' . $value . '\' );';
- } else {
- $QryString .= '\'' . $value . '\', ';
- }
- }
- //On libère un peu la mémoire occupée par ce script...
- unset($TotalFields, $CurrentField, $field, $value); //Zou!
- return $QryString;
- }
- /**
- * Fonction buildUpdateQuery qui retourne une requête SQL UPDATE
- * @param array $Values le tableau contenant la liste des champs et valeurs à mettre à jour
- * @param string $Table la table cible
- * @param array $Where le tableau contenant la liste des clauses where à la requête
- * @return string $QryString la requête UPDATE
- */
- public function buildUpdateQuery($Values, $Table, $Where) {
- $TotalFields = sizeof($Values);
- $CurrentField = 0;
- $QryString = "UPDATE `" . $Table . "` SET";
- foreach ($Values as $field => $value) {
- $CurrentField++;
- if ($CurrentField == $TotalFields) {
- $QryString .= " `" . $field . "` = '" . $value . "' ";
- } else {
- $QryString .= " `" . $field . "` = '" . $value . "',";
- }
- }
- $TotalFields = sizeof($Where);
- $CurrentField = 0;
- $QryString .= 'WHERE';
- foreach ($Where as $field => $value) {
- $CurrentField++;
- if ($CurrentField == $TotalFields) {
- $QryString .= " `" . $field . "` = '" . $value . "';";
- } else {
- $QryString .= " `" . $field . "` = '" . $value . "' AND ";
- }
- }
- //On libère un peu la mémoire occupée par ce script...
- unset($TotalFields, $CurrentField, $field, $value); //Zou!
- return $QryString;
- }
- public function buildIncrementalUpdateQuery($Values, $Table, $Where) {
- $TotalFields = sizeof($Values);
- $CurrentField = 0;
- $QryString = "UPDATE `" . $Table . "` SET";
- foreach ($Values as $Clause) {
- $CurrentField++;
- if ($CurrentField == $TotalFields) {
- $QryString .= " `" . $Clause['field'] . "` = `" . $Clause['field'] . "` " . $Clause['type'] . " '" . $Clause['value'] . "' ";
- } else {
- $QryString .= " `" . $Clause['field'] . "` = `" . $Clause['field'] . "` " . $Clause['type'] . " '" . $Clause['value'] . "',";
- }
- }
- $TotalFields = sizeof($Where);
- $CurrentField = 0;
- $QryString .= 'WHERE';
- foreach ($Where as $field => $value) {
- $CurrentField++;
- if ($CurrentField == $TotalFields) {
- $QryString .= " `" . $field . "` = '" . $value . "';";
- } else {
- $QryString .= " `" . $field . "` = '" . $value . "' AND ";
- }
- }
- //On libère un peu la mémoire occupée par ce script...
- unset($TotalFields, $CurrentField, $field, $value); //Zou!
- return $QryString;
- }
- /**
- * Fonction buildInsertPreparedQuery qui retourne une requête SQL INSERT INTO préparée
- * @param array $Values le tableau contenant la liste des champs et valeurs à insérer
- * @param string $Table la table cible
- * @return string $QryString la requête INSERT INTO préparée
- */
- public function buildInsertPreparedQuery($Values, $Table) {
- $TotalFields = sizeof($Values);
- $CurrentField = 0;
- $QryString = 'INSERT INTO `' . $Table . '` (';
- foreach ($Values as $field => $value) {
- $CurrentField++;
- if ($CurrentField == $TotalFields) {
- $QryString .= '`' . $field . '` ) VALUES ( ';
- } else {
- $QryString .= '`' . $field . '`, ';
- }
- }
- $CurrentField = 0;
- foreach ($Values as $field => $value) {
- $CurrentField++;
- if ($CurrentField == $TotalFields) {
- $QryString .= ':' . $field . ' );';
- } else {
- $QryString .= ':' . $field . ', ';
- }
- }
- //On libère un peu la mémoire occupée par ce script...
- unset($TotalFields, $CurrentField, $field, $value); //Zou!
- return $QryString;
- }
- /**
- * Fonction buildUpdatePreparedQuery qui retourne une requête SQL UPDATE préparée
- * @param array $Values le tableau contenant la liste des champs et valeurs à mettre à jour
- * @param string $Table la table cible
- * @param array $Where le tableau contenant la liste des clauses where à la requête préparée
- * @return string $QryString la requête UPDATE préparée
- */
- public function buildUpdatePreparedQuery($Values, $Table, $Where) {
- $TotalFields = sizeof($Values);
- $CurrentField = 0;
- $QryString = "UPDATE `" . $Table . "` SET";
- foreach ($Values as $field => $value) {
- $CurrentField++;
- if ($CurrentField == $TotalFields) {
- $QryString .= " `" . $field . "` = :" . $field . " ";
- } else {
- $QryString .= " `" . $field . "` = :" . $field . ",";
- }
- }
- $TotalFields = sizeof($Where);
- $CurrentField = 0;
- $QryString .= 'WHERE';
- foreach ($Where as $field => $value) {
- $CurrentField++;
- if ($CurrentField == $TotalFields) {
- $QryString .= " `" . $field . "` = :" . $field . ";";
- } else {
- $QryString .= " `" . $field . "` = :" . $field . " AND ";
- }
- }
- //On libère un peu la mémoire occupée par ce script...
- unset($TotalFields, $CurrentField, $field, $value); //Zou!
- return $QryString;
- }
- public function buildLockQuery($Values) {
- $TotalFields = sizeof($Values);
- $CurrentField = 0;
- $QryString = 'LOCK TABLE';
- foreach ($Values as $Table) {
- $CurrentField++;
- $Table = self::DEFAULT_SQL_PREFIX . $Table;
- if ($CurrentField == $TotalFields) {
- $QryString .= ' ' . $Table . ' WRITE';
- } else {
- $QryString .= ' ' . $Table . ' WRITE,';
- }
- }
- return $QryString;
- }
- public function buildDeleteQuery($Where, $Table) {
- $QryString = 'DELETE FROM ' . $Table . ' ';
- if ($Where) {
- $TotalFields = sizeof($Where);
- $CurrentField = 0;
- $QryString .= 'WHERE';
- foreach ($Where as $Clause) {
- $CurrentField++;
- if ($CurrentField == $TotalFields) {
- $QryString .= " `" . $Clause['field'] . "` " . $Clause['type'] . " '" . $Clause['value'] . "' ";
- } else {
- $QryString .= " `" . $Clause['field'] . "` " . $Clause['type'] . " '" . $Clause['value'] . "' AND ";
- }
- }
- }
- //On libère un peu la mémoire occupée par ce script...
- unset($TotalFields, $CurrentField, $field, $value); //Zou!
- return $QryString;
- }
- public function __get($name) {
- return $this->{$name};
- }
- }
- ?>
Add Comment
Please, Sign In to add comment