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.
le méthode GetObjSQL::$sqlPDO->lastInsertId($sql); return false
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; }
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:
Mais la encore ça ne fonctionne pas.
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; }
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.
Partager