class pdo en fille

x@v
Mammouth du PHP | 570 Messages

23 avr. 2008, 20:56

j'ai pas compris :oops:
par contre ceci me retourne le résultat en double :?:
	public function select($reqSelect)
	{
		$this->result=$result;
		$result=array();
		$result= $this->con->query($reqSelect);
		foreach ($result as $row)
		{
			foreach ($row as $ligne)
			{
				return $ligne.'<br>';
			}
		}
	}
j'ai un exemple en procédural qui fonctionne...
function get_news($id)
{
$news_req = mysql_query("SELECT * FROM news WHERE id='$news_id'",dbconnect());
return mysql_fetch_array($news_req);
}

function get_comment($news_id)
{
	$comment_req = mysql_query("SELECT * FROM commentaires WHERE news_id='$news_id'",dbconnect());
	$result = array();
	while ($comment = mysql_fetch_array($comment_req)) 
	{
		$result[] = $comment;
	}
	return $result;
}
edit->
j'ai refait ma class avec héritage, donc sa fonctionne, j'ai aussi ajouter les transactions qui d'après la doc améliorent la vitesse entre autre chose.
http://www.developpus.com/mvc/controlle ... page=index (sa semble vrai)
Mais suis-je dans le vrai ?
<?php
require_once('message.class.php');
class Connection extends PDO {
	
	private $db = 'boutique'; 		// base de données
	private $host = 'localhost'; 	// adresse de la base
	private $user = 'root'; 		// nom
	//private $pwd = ''; 				// mot de passe
	private $pwd = '***********';	// mot de passe
	private $con;					// 
	private $select; 				// requette de séléction
	private $execute; 				// requette d'execution
	private $result;				//
	private $dns;
      
    public function __construct () 
    {
        try {
			$dsn = "mysql:dbname=$this->db;host=$this->host";
			$this->con = parent::__construct($dsn, $this->user, $this->pwd);
			//return $this->con;
        }
        catch(PDOException $e) {
			error_log(date('D/m/y').' à '.date("H:i:s").' : '.$e->getMessage(), 1, '[email protected]');
			$message= new Message();
			$message->outPut('Erreur 500', 'Serveur de BDD indisponible, nous nous excusons de la gêne occasionnée');
        }
    }

	public function select($reqSelect)
	{
		try 
		{
			parent::beginTransaction();
			$result=parent::query($reqSelect);
			parent::commit();
	  		return $result;
		}
		catch (Exception $e) 
		{
			//On indique par email qu'on n'a plus de connection disponible
			error_log(date('D/m/y').' à '.date("H:i:s").' : '.$e->getMessage(), 1, '[email protected]');
			parent::rollBack();
			$message= new Message();
			$message->outPut('Erreur dans la requêtte', 'Votre requête a été abandonné');
		}
	}
	public function selectTest($reqSelect)
	{
			$result=parent::query($reqSelect);
	  		return $result;
	}
}
/*
$connection = new Connect();
////////////////////////////////////////////
$sql="SELECT * FROM categorie";
$result= $connection->select($sql);
foreach ($result as $row)
{
	echo $row['description'].'<br>';
}
*/
?>

x@v
Mammouth du PHP | 570 Messages

27 avr. 2008, 13:55

ce que je ne comprend pas c'est pourquoi ont ne peux pas surcharger ou faire du polymorphisme avec la classe héritée PDO ?

ViPHP
ViPHP | 4674 Messages

27 avr. 2008, 14:31

Ce que tu as fait est correcte même si c'est un peu bancale. Mais bon, ça reste quand même pas trop mauvais dans l'ensemble.

Qu'est-ce que tu veux dire qu'on ne peut pas redéfinir les méthodes de PHP ? Et là, je crois que tu confonds le terme polymorphisme avec autre chose, car « faire du polymorphisme » ne s'applique pas dans ton cas.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

x@v
Mammouth du PHP | 570 Messages

27 avr. 2008, 14:45

en faite je l'ai revue, mais sans requete préparé je ne me protège pas des injections ?
<?php
#########################################################################################################
//////////////////////////////////				/************************************************/		#
//  	 #              #		//				/*     *****   class par Xavier Artot alias x@v */		#
//       #             ##		//				/*     *****   [email protected] ****************/		#
//       ###        #####		//				/*     *****   Ma première classe en php ********/		#
//       # ###    #######		//				/*     *****   cette classe permet d'avoir un ***/		#
//            ########  #		//				/*     *****   panier ou cadie pour un site *****/		#
//           #######			//				/*     *****   vous êtes conviés à laisser ******/		#
//       # #########			//				/*     *****   ce commentaire *******************/		#
//       ######     ### #		//				/*     *****   developpus.com *******************/		#
//       ###          ###		//				/*     *****   developpus.com *******************/		#
//       #              #		//				/*     *****   developpus.com *******************/		#
//          ###					//				/*     *****   developpus.com *******************/		#
//        #######    ##			//				/*     *****   developpus.com *******************/		#
//       #########  ####		//				/************************************************/		#
//       ##     ##   # ##		//																		#
//       #      ##      #		//																		#
//       ##     #      ##		//																		#
//       ###############		//																		#
//       ##############			//																		#
//       #						//																		#
//								//																		#
//                      #		//																		#
//                    ###		//																		#
//                #######		//																		#
//             ##########		//																		#
//        ##########			//																		#
//       ########				//																		#
//           ###				//																		#
//               ####   #		//																		#
//                   ####		//																		#
//                      #		//																		#
//////////////////////////////////																		#
#########################################################################################################
require_once('message.class.php');
class Connection extends PDO 
{	
	private $db = 'boutique'; 		// base de données
	private $host = 'localhost'; 	// adresse de la base
	private $user = 'root'; 		// nom
	private $pwd = ''; 				// mot de passe
	//private $pwd = '**********';	// mot de passe
	private $con;					// 
	private $select; 				// requette de séléction
	private $execute; 				// requette d'execution
	private $result;				//
	private $dns;
      
    public function __construct () 
    {
        try {
			$this->con = parent::__construct($this->getDns(), $this->user, $this->pwd);
		    // pour mysql on active le cache de requête
		    if($this->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql')
		    {
		    	$this->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
		    }
		    return $this->con;
        }
        catch(PDOException $e) {
			//On indique par email qu'on n'a plus de connection disponible
			error_log(date('D/m/y').' à '.date("H:i:s").' : '.$e->getMessage(), 1, '[email protected]');
			$message= new Message();
			$message->outPut('Erreur 500', 'Serveur de BDD indisponible, nous nous excusons de la gêne occasionnée');
		}
    }
    
	public function select($reqSelect)
	{
		try 
		{
			$this->con = parent::beginTransaction();
			$result= parent::query($reqSelect);
			$this->con = parent::commit();
	  		return $result;
		}
		catch (Exception $e) 
		{
			//On indique par email que la requête n'a pas fonctionné.
			error_log(date('D/m/y').' à '.date("H:i:s").' : '.$e->getMessage(), 1, '[email protected]');
			$this->con =parent::rollBack();
			$message= new Message();
			$message->outPut('Erreur dans la requêtte', 'Votre requête a été abandonné');
		}
	}
	
	public function getDns()
	{
		return 'mysql:dbname='.$this->db.';host='.$this->host;
	}
}
?>
J'entends polymorphisme surcharger les méthodes ou redéfinir grace à l'héritage en passant d'une classe à l'autre à travers des associations de compositions.
Mais ça fait longtemps que j'ai pas codé en java et ont perds vite.

ViPHP
ViPHP | 4674 Messages

27 avr. 2008, 15:07

Tu ne te protèges effectivement pas des injections SQL avec ton code.

Les notions de POO n'appartiennent pas à Java hein. On en a tué pour l'exemple pour moins que ça tu sais ...
Le polymorphisme existe pour nous permettre des implémentations abstraites, ou une utilisation abstraite du code. Donc ça passe à travers l'extension d'une classe normale, d'une classe abstraite, ou d'une interface.

Le fait que tu puisses utiliser l'association (notion générale de l'agrégation et composition) est dû au fait que tu as un polymorphisme. Tu peux interchanger les objets entre eux sans te poser de question car ils ont un type particulier.

Bon — on y arrive — pourquoi dis-tu qu'on ne peut pas faire de surchage avec la classe de PDO ? Je doute que toutes les méthodes soient finalisées (via le mot-clé final) ...
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).