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.