[RESOLU] Récupération d'un ID auto-incrémenté

Petit nouveau ! | 5 Messages

09 avr. 2013, 14:07

Bonjour à tous !

J'ai un petit problème donc je viens vous demander un peu d'aide :

J'ai une classe Demande relié donc à une table Demande dans ma base de données.

J'ai les attributs suivants :
class Demande 
{

	/******************************************************************/
	/*                 Attributs privés de la classe                  */
	/******************************************************************/
	private $id;
	private $id_AD;
	private $id_objet;
	private $commentaire;
	private $date_crea;
	private $date_modif;
	

	
	
	/******************************************************************/
	/*                       Getters / Setters                        */
	/******************************************************************/
	
	public function setID($intID)											//Définition de l'ID
	{
		$this->id = $intID;
	}
	public function getID()
	{
		return $this->id;
	}
Et le constructeur suivant :
	//Constructeur
	public function __construct($intAD, $intID_objet, $stringCommentaire, $dateDate_crea, $dateDate_modif) {
		$this->setID($intID);
		$this->setID_AD($intAD);
		$this->setID_objet($intID_objet);
		$this->setCommentaire($stringCommentaire);
		$this->setDateCrea($dateDate_crea);
		$this->setDateModif($dateDate_modife);
		
	}
Comme l'ID est auto-incrémenté, je ne le construit pas.

Et enfin, une fonction d'affichage :
//Fonction affichant la demande
	public function afficher()
	{
		echo '*****************Affichage de la demande n°'.$this->getID().'***************** <br/>';
		echo ('ID de l\'AD : '.$this->getID_AD().'<br/>');
		echo ('ID de l\'objet : '.$this->getID_objet().'<br/>');
		echo ('Commentaire : '.$this->getCommentaire().'<br/>');
		echo ('Date de création : '.$this->getDateCrea().'<br/>');
		echo ('Date de modification : '.$this->getDateModif().'<br/>');
	}
Or, je voudrais savoir comment avoir l'ID de la demande, car, bien entendu, elle n'apparaît pas.

J'ai exploré deux solutions :

-Construire l'ID (ce dont je ne vois pas l'intérêt étant donné qu'il est auto-incrémenté dans ma base de données).

-Faire une requête de récupération de l'ID dans mon Setter.

J'aimerais donc savoir ce que vous pensez de ces deux solutions, et pourquoi pas m'en donner une meilleure :)

Merci d'avance.

Eléphant du PHP | 353 Messages

09 avr. 2013, 15:43

D'où vient $intID dans le constructeur ? J'imagine que ton constructeur fait ensuite quelque part la requête sql. Juste après il faut que tu récupères l'identifiant avec mysqli_insert_id() si tu utilises mysql évidemment.
(

Petit nouveau ! | 5 Messages

09 avr. 2013, 15:51

Petit oubli de ma part pour le intID dans le constructeur, au temps pour moi, c'est corrigé.

Je travaille via une base de données SQL Server. Je vais tenter de trouver un équivalent à mysqli_insert_id(), ça doit bien exister je pense.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

09 avr. 2013, 20:05

salut,

1/ un objet de ce type (qui représente une entité, aussi appelé pojo en java) ne devrais pas contenir de logique. Pour l'affichage au mieux il retourne une chaîne de caractère (voir la méthode magique __toString()).
2/ comment est ce que tu récupère les informations que tu passe dans le constructeur ?
C'est dans cette partie du code qu'il te faut fournir l'id.
si tu utilise cette objet pour alimenter le SGBD alors oui il te faut faire ensuite un select sur la base pour avoir le dernier id (si tu met l'insert et le select dans une transaction un simple select id from demande order by id desc avec un clause similaire au limit 1 de mysql est le tour est joué ;)).

Dans tous les cas sans le code exécutant la requête sql select ou insert on ne peux pas t'aider.


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 5 Messages

10 avr. 2013, 13:02

Problème résolu, merci Moogli pour ta réponse. J'utilisais bien l'objet Demande pour alimenter ma BD donc oui, une simple requête comme celle que tu m'as donnée a suffit et donc résolu mon problème.

Merci beaucoup pour votre aide.