IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Problème LastInsertId postgresSQL [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 117
    Points : 66
    Points
    66
    Par défaut Problème LastInsertId postgresSQL
    bonjour,

    jai un problème pour récupérer l'id de la derrière insertion avec postgresql en utilisant pdo.

    voici lde code en utilisant la méthode standard.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    		// Initation de de l'obj PDO
    		GetObjSQL::initSqlPDO();
    		function sqlEntite(){
    			$sql="INSERT INTO entite (check_entite) VALUES (NULL)";
    			GetObjSQL::$sqlPDO->beginTransaction();
    			$req = GetObjSQL::$sqlPDO->prepare($sql);
    			if($req->execute()){
    				try{
    					GetObjSQL::$sqlPDO->commit();
    					$id=GetObjSQL::$sqlPDO->lastInsertId($sql);
    					var_dump($id); // return false
    					echo "\nID Entite : (".$id.")";
    				} catch(PDOExecption $e) { 
    					GetObjSQL::$sqlPDO->rollBack();
    					print "Error!: " . $e->getMessage() . "</br>";
    				}
     
    			}else{
    				echo "erreur";
    			}
    			return $id;
    		}
    le méthode GetObjSQL::$sqlPDO->lastInsertId($sql); return false
    j'ai suivie la méthode proposer sur http://fr2.php.net/manual/en/pdo.lastinsertid.php

    Sinon ils proposaient une méthode que j'ai également testé.
    je l'ai inclut dans ma class qui me fournie l'obj PDO j'ajoute cette méthode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    public static function LastInsertId($sqlQuery)
    	{
        	// Checks if query is an insert and gets table name
        	if( preg_match("/^INSERT[\t\n ]+INTO[\t\n ]+([a-z0-9\_\-]+)/is", $sqlQuery, $tablename) )
        	{
            	// Gets this table's last sequence value
            	$query = "SELECT currval('" . $tablename[1] . "_id_seq') AS last_value";
     
            	echo $query;
     
            	$temp_q_id = self::$sqlPDO->prepare($query);
                $temp_q_id->execute();
     
        	    if($temp_q_id)
        	    {
        	        $temp_result = $temp_q_id->fetch(PDO::FETCH_ASSOC);
        	        return ( $temp_result ) ? $temp_result['last_value'] : false;
        	    }
        	}
        	return false;
    	}
    Mais la encore ça ne fonctionne pas.
    Quand je fait a la main la requet sql : SELECT currval('entite_id_seq') AS last_value
    cela me retourne une erreur:
    ERREUR: la relation « entite_id_seq » n'existe pas
    LINE 1: SELECT currval('entite_id_seq') AS last_value


    merci pour votre aide.

  2. #2
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 117
    Points : 66
    Points
    66
    Par défaut
    voila ... soulution trouvé il faut juste metre le bon nom de séquence qui se compose comme ceci : $table_$idSequence_seq

    ce qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    		// Initation de de l'obj PDO
    		GetObjSQL::initSqlPDO();
    		function sqlEntite(){
    			$sql="INSERT INTO entite (check_entite) VALUES (NULL)";
    			GetObjSQL::$sqlPDO->beginTransaction();
    			$req = GetObjSQL::$sqlPDO->prepare($sql);
    			if($req->execute()){
    				try{
    					GetObjSQL::$sqlPDO->commit();
    					$id=GetObjSQL::$sqlPDO->lastInsertId('entite_id_entite_seq');
    					var_dump($id);
    					echo "\nID Entite : (".$id.")";
    				} catch(PDOExecption $e) { 
    					GetObjSQL::$sqlPDO->rollBack();
    					print "Error!: " . $e->getMessage() . "</br>";
    				}
    			}else{
    				echo "erreur";
    			}
    			return $id;
    		}

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  2. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. Réponses: 6
    Dernier message: 25/03/2002, 21h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo