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.