note 86178 added to pdo.lastinsertid

From: Date: Tue, 07 Oct 2008 00:21:58 +0000
Subject: note 86178 added to pdo.lastinsertid
Groups: php.notes 
Request: Send a blank email to php-notes+get-145110@lists.php.net to get a copy of this message
For PostgreSQL you can still use the old solution to return the last Id of an INSERT, selecting the currval of a table's id_sequence. The code below shows a working function (which is easy adaptale into another class, etc). <?php // ------------------------- // Last Insert ID for PDO with PostgreSQL // ------------------------- function pgsqlLastInsertId($sqlQuery, $pdoObject) { // 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"; $temp_q_id = $pdoObject->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; } ?> Example of use: <?php // ... connects to a PostgreSQL DB $pdoObject = new PDO('pgsql:host=localhost;dbname=mydb', 'user', 'pass'); $sql = 'INSERT INTO table (column) VALUES (\'some_value\');'; $result = $pdoObject->prepare($sql); $result->execute(); echo 'Last Insert ID: ' . pgsqlLastInsertId($sql, $pdoObject); ?> ---- Server IP: 200.185.109.13 Probable Submitter: 200.138.54.180 ---- Manual Page -- http://www.php.net/manual/en/pdo.lastinsertid.php Edit -- https://master.php.net/note/edit/86178 Del: integrated -- https://master.php.net/note/delete/86178/integrated Del: useless -- https://master.php.net/note/delete/86178/useless Del: bad code -- https://master.php.net/note/delete/86178/bad+code Del: spam -- https://master.php.net/note/delete/86178/spam Del: non-english -- https://master.php.net/note/delete/86178/non-english Del: in docs -- https://master.php.net/note/delete/86178/in+docs Del: other reasons-- https://master.php.net/note/delete/86178 Reject -- https://master.php.net/note/reject/86178 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#145110) next »