<?php

/**------------------------------------------------
*
* Rooty, 2018 <rooty@rooty.me>
*
*
* This software is protected by copyright, please
* read the file COPYRIGHT.
* This program is distributed in the hope that it
* will be useful, but without any warranty; without
* even the implied warranty of merchantability or
* fitness for a particular purpose. Please
* read the file LICENCE.
*
*                                 mysql5.php
*                            -------------------
*   begin                : Saturday, Feb 13, 2001
*   copyright            : (C) 2001 The phpBB Group
*   email                : supportphpbb.com
*
*   $Id: mysql5.php,v 1.3 2006/10/10 21:38:55 tristan Exp $
*
*
*   This program is free software; you can redistribute it and/or modify
*   it under the terms of the GNU General Public License as published by
*   the Free Software Foundation; either version 2 of the License, or
*   (at your option) any later version.
*
*
*Fichier mysql5.php
*
*Ce fichier contient la classe d'accès aux données pour MYSQL 5
*
* @author The phpBB Group
* @since 2018/03/19
* @version 1.16
* @link http://www.phpbb.com
* @package system_data_source
* @subpackage database
* @modify by Initiance <www.initiance.com|olivier@initiance.com>
*
*/

#####################################################################################################
################################# Parametrage
#####################################################################################################
/**
* declaration du system... si cette variable n'est pas définie, les fichier inclus ne marche pas...
* cette variable est déclarée sur la page d'execution du script.
*<p> if ( !defined('SYSTEM_IN') )
* {
* die("Hacking attempt");
* }</p>
*/
if ( !defined('SYSTEM_IN') )
{
 die("Hacking attempt");
}

/**
* classe pdo
*
* classe de gestion de MySQL 4.xx
*
* @package system_data_source
* @subpackage database
*/
class mypdo extends Database
{

/**#@+
* @access public
*/

/**
* @var entier
* @desc identifiant de la connection a la base
*/
	var $db_connect;
/**
* @var query_result
* @desc pointeur de résultat sur requete SELECT
*/
	var $query_result;
/**
* @var tableau
* @desc Contient une ligne de résultat
*/
	var $row = array();
/**
* @var tableau
* @desc Contient tout le jeu de résultats
*/
	var $rowset = array();

/**
* @var entier
* @desc Nombre total de requetes effectuées
*/
	var $num_queries = 0;

/**#@-*/

	//
	// Constructor
	//

/**
*Constructeur de la classe MySQL5
*
*<p>Initialise la connection a la base de données MySQL 5</p>
*
* @param chaine Nom de l'hote MySQL
* @param chaine Nom d'utilisateur
* @param chaine Mot de passe de connection
* @param chaine Nom de la base a utiliser
* @param booléen Connection persistante
*/
	function mypdo($dbtype, $host, $user, $password, $database, $charset, $persistency = true)
	{
		$this->__construct($dbtype, $server, $user, $password, $database, $charset, $persistency);
	}

	function __construct($dbtype, $server, $user, $password, $database, $charset, $persistency = true)
	{        
        $this->persistency =    $persistency;
        $this->dbtype =         $dbtype;
        $this->user =           $user;
        $this->password =       $password;
        $this->server =         $server;
        $this->dbname =         $database;
        $this->dbcharset =      $charset;
 
        try {
            $this->db_connect = new PDO("$this->dbtype:host=$this->server;dbname=$this->dbname;charset=$this->dbcharset", "$this->user", "$this->password"); // PDO Connection
//             echo 'Connexion réussie : '.$this->db_connect."<br>";
//             return $this->db_connect;
        } catch  (PDOException $e) {
//             echo 'Connexion échouée : ' . $e->getMessage();
            return false;
        }

//         if($this->persistency)
//         {
//             $this->db_connect_id = @mysql_pconnect($this->server, $this->user, $this->password);
//         }
//         else
//         {
//             $this->db_connect_id = @mysql_connect($this->server, $this->user, $this->password);
//         }
//         if($this->db_connect_id)
//         {
//             if($database != "")
//             {
//                 $this->dbname = $database;
//                 $dbselect = @mysql_select_db($this->dbname);
//                 if(!$dbselect)
//                 {
//                 @mysql_close($this->db_connect_id);
//                 $this->db_connect_id = $dbselect;
//                 }
//             }
//             return $this->db_connect_id;
//         }
//         else
//         {
//             return false;
//         }
    }
    
    function prepare($sql)
    {
        return $this->db_connect->prepare($sql);
    }
    
    function sql_quote($sql)
    {
        return $this->db_connect->quote($sql);
    }

/**
*fermeture de connection
*
* fonction qui ferme la connection a la base mysql
*
* @return booléen
*/
	function sql_close()
	{
		if($this->db_connect)
		{
            $result = $this->db_connect=null;
			return $result;
		}
		else
		{
			return false;
		}

//         if($this->db_connect)
//         {
//             if(isset($this->query_result))
//             {
//                 @mysql_free_result($this->query_result);
//             }
//             $result = @mysql_close($this->db_connect);
//             return $result;
//         }
//         else
//         {
//             return false;
//         }
   }

	//
	// Base query method
	//

/**
*fonction de requete SQL
*
* permet de faire une requete sur la connection mySQL ouverte
*
* @param chaine Requete SQL
* @param booléen inutilisé dans ce cas
* @return result renvoie un pointeur de resultat ou faux si erreur de requete
*/

	function sql_query($query = "", $transaction = FALSE)
	{
		$query=Database::rewriteQuery($query);
		//echo $query."<br>";
		$GLOBALS["SYSTEM_NB_QUERY"]=(isset($GLOBALS["SYSTEM_NB_QUERY"]))?$GLOBALS["SYSTEM_NB_QUERY"]+1:1;
		// Remove any pre-existing queries
// 		unset($this->query_result);
		if($query != "")
		{
			$this->num_queries++;
// 			$this->query_result = $this->db_connect->query($query);

            $this->query_result = $this->db_connect->prepare($query);
            $this->query_result->execute();
		}
		if(isset($this->query_result))
//         if (!$this->query_result = $this->db_connect->query($query))
		{
// 			unset($this->row[$this->query_result]);
// 			unset($this->rowset[$this->query_result]);
			return $this->query_result;
		}
		else
		{
			return ( $transaction == END_TRANSACTION ) ? true : false;
		}

//         unset($this->query_result);
//       if($query != "")
//       {
//          $this->num_queries++;
// 
//          $this->query_result = @mysql_query($query, $this->db_connect_id);
//       }
//       if(isset($this->query_result))
//       {
//          unset($this->row[$this->query_result]);
//          unset($this->rowset[$this->query_result]);
//          return $this->query_result;
//       }
//       else
//       {
//          return @( $transaction == END_TRANSACTION ) ? true : false;
//       }
	}

/**
*Nombre de resultats retournés
*
*permet de récuperer le nombre de lignes retournées lors de la dernière requête effectuée.
*
* @param entier (facultatif) identifiant de requete , utilise la dernière requete par defaut
* @return entier nombre de résultats
*/
	function sql_numrows($query_id = 0)
	{
// 		if(!$query_id)
// 		{
// 			$query_id = $this->query_result;
// 		}
// 		if($query_id)
// 		{
// // 			$result = mysql_num_rows($query_id);
// //             echo $query_id->num_rows;
// 			return $query_id->num_rows;
// 		}
// 		else
// 		{
// 			return false;
// 		}

        if(!$query_id)
        {
            $query_id = $this->query_result;
        }
        if($query_id)
        {
    //          $result = @mysql_num_rows($query_id);
    //             $result = $this->query_result->rowCount();
            return $query_id->rowCount();
        }
        else
        {
            return false;
        }
	}

/**
*Nombre d'enregistrements modifiés
*
* retourne le nombre d'enregistrements affectés par la derniere requete.
*
* @return entier nombre d'enregistrements modifiés
*/
	function sql_affectedrows()
	{
		if($this->query_result)
		{
// 			$result = @mysql_affected_rows($this->db_connect);
			
			$result = $this->query_result->rowCount();
// 			var_dump("Result :");
// 			var_dump($result);
			return $result;
		}
		else
		{
			return false;
		}
	}

/**
*Nombre de champs
*
* retourne le nombre de champs de la derniere requete effectuée
*
* @param entier (facultatif) identifiant de requete , utilise la dernière requete par defaut
* @return entier nombre de champs
*/

	function sql_numfields($query_id = 0)
	{
		if(!$query_id)
		{
			$query_id = $this->query_result;
		}
		if($query_id)
		{
			$result = @mysql_num_fields($query_id);
			return $result;
		}
		else
		{
			return false;
		}
	}

/**
*Nom d'un champ
*
* retourne le nom du champ placé a offset
*
* @param entier emplacement du champ
* @param entier (facultatif) identifiant de requete , utilise la dernière requete par defaut
* @return chaine nom du champ
*/	
	function sql_fieldname($offset, $query_id = 0)
	{
		if(!$query_id)
		{
			$query_id = $this->query_result;
		}
		if($query_id)
		{
			$result = @mysql_field_name($query_id, $offset);
			return $result;
		}
		else
		{
			return false;
		}
	}
	
/**
*Type d'un champ
*
* retourne le type du champ placé a offset
*
* @param entier emplacement du champ
* @param entier (facultatif) identifiant de requete , utilise la dernière requete par defaut
* @return chaine type de champ
*/	
	function sql_fieldtype($offset, $query_id = 0)
	{
		if(!$query_id)
		{
			$query_id = $this->query_result;
		}
		if($query_id)
		{
			$result = @mysql_field_type($query_id, $offset);
			return $result;
		}
		else
		{
			return false;
		}
	}

/**
*Obtenir un résultat
*
* retourne l'enregistrement courant sous forme de tableau
*
* @param entier facultatif) identifiant de requete , utilise la dernière requete par defaut
* @return tableau tableau contenant les différents champs
*/

	function sql_fetchrow($query_id = 0)
    {
        if(!$query_id)
        {
            $query_id = $this->query_result;
        }
        
        if($query_id)
        {
            $query_id->setFetchMode(PDO::FETCH_BOTH);// Mode par défaut (tableau)
//             var_dump($query_id);
//             $this->row[$query_id] = @mysql_fetch_array($query_id);
            $this->row = $query_id->fetch();
//             var_dump($this->row);
            return $this->row;
        }else{
            return false;
        }
   }
/**
*Obtenir tous les résultats
*
* retourne tous les enregistrements courants (derniere requete effectuée) sous forme de tableau
*
* @param entier  (facultatif) identifiant de requete , utilise la dernière requete par defaut
* @return tableau_2D tableau à deux dimensions contant tous les enregistrement
*/
	function sql_fetchrowset($query_id = 0)
	{
        if(!$query_id)
        {
            $query_id = $this->query_result;
        }
        if($query_id)
        {
            $query_id->setFetchMode(PDO::FETCH_BOTH);// Mode par défaut (tableau)
//          unset($this->rowset[$query_id]);
//          unset($this->row[$query_id]);
//          while($this->rowset[$query_id] = @mysql_fetch_array($query_id))
            while($this->rowset = $query_id->fetch())
            {
                $result[] = $this->rowset;
            }
            return $result;
        }else{
            return false;
        }
	}


/**
*Obtenir un champ particulier d'un resultat
*
* retourne un champ déterminé d'un enregistrement déterminé .
*
* @param entier (ou chaine) champ a renvoyer
* @param entier (facultatif) identifiant de l'enregistrement (dernier par defaut)
* @param entier (facultatif) identifiant de requete , utilise la dernière requete par defaut
* @return chaine valeur du champ
*/
	function sql_fetchfield($field, $rownum = -1, $query_id = 0)
	{
		if(!$query_id)
		{
			$query_id = $this->query_result;
		}
		if($query_id)
		{
			if($rownum > -1)
			{
				$result = @mysql_result($query_id, $rownum, $field);
			}
			else
			{
				if(empty($this->row[$query_id]) && empty($this->rowset[$query_id]))
				{
					if($this->sql_fetchrow())
					{
						$result = $this->row[$query_id][$field];
					}
				}
				else
				{
					if($this->rowset[$query_id])
					{
						$result = $this->rowset[$query_id][$field];
					}
					else if($this->row[$query_id])
					{
						$result = $this->row[$query_id][$field];
					}
				}
			}
			return $result;
		}
		else
		{
			return false;
		}
	}


/**
*Déplacement de pointeur de résultat
*
* permet de déplacer le pointeur de résultat.
*
* @param entier ligne
* @param entier (facultatif) identifiant de requete , utilise la dernière requete par defaut
* @return result nouveau pointeur de resultat
*/
	function sql_rowseek($rownum, $query_id = 0){
		if(!$query_id)
		{
			$query_id = $this->query_result;
		}
		if($query_id)
		{
			$result = @mysql_data_seek($query_id, $rownum);
			return $result;
		}
		else
		{
			return false;
		}
	}

/**
*Identifiant d'insertion
*
* permet d'obtenir l'identifiant d'insertion (Requete INSERT)
*
* @return entier identifiant
*
*/
	function sql_nextid(){
		if($this->db_connect)
		{
// 			$result = @mysql_insert_id($this->db_connect);
            $result = $this->db_connect->lastInsertId(); 
			return $result;
		}
		else
		{
			return false;
		}
	}

/**
*Liberer l'espace mémoire
*
* permet de liberer la memoire occupée par le pointeur de résultat
*
* @param entier (facultatif) identifiant de requete , utilise la dernière requete par defaut
* @return booléen effectué avec succès
*/
// 	function sql_freeresult($query_id = 0){
// 		/* renvoi une erreur auto */
// // 		if( !$query_id )
// // 		{
// // 			$query_id = $this->query_result;
// // 		}
// // 
// // 		if ( $query_id )
// // 		{
// // // 			unset($this->row[$query_id]);
// // // 			unset($this->rowset[$query_id]);
// // // 			mysql_free_result($query_id);
// //             $this->query_result->free_result();
// // 			return true;
// // 		}
// // 		else
// // 		{
// // 			return false;
// // 		}
// 
//         if(!$query_id)
//         {
//             $query_id = $this->query_result;
//         }
// 
//         if ( $query_id )
//         {
// //          unset($this->row[$query_id]);
// //          unset($this->rowset[$query_id]);
// 
// //          @mysql_free_result($query_id);
//             $this->query_result->free_result();
// 
//             return true;
//         }else{
//             return false;
//         }
// 	}

/**
*Fonction d'erreur
*
* retourne un tableau contenant le numero et le message d'erreur
*
* @return tableau contenant les index ['message'] et ['code']
*/

	function sql_error($query_id = 0)
	{
		$result["message"] = @mysql_error($this->db_connect);
		$result["code"] = @mysql_errno($this->db_connect);

		return $result;
	}

}
?>
