Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PDO
PDO Forum d'entraide sur PDO (PHP Data Objects) : pilote générique de bases de données avec PHP. Avant de poster -> FAQ PDO et Cours PDO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/02/2011, 14h39   #1
Nouveau Membre du Club
 
Inscription : juin 2008
Messages : 116
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 116
Points : 33
Points : 33
Envoyer un message via MSN à spy74
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 :
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 :
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.
spy74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 14h54   #2
Nouveau Membre du Club
 
Inscription : juin 2008
Messages : 116
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 116
Points : 33
Points : 33
Envoyer un message via MSN à spy74
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 :
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;
		}
spy74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h01.


 
 
 
 
Partenaires

Hébergement Web