added table and colum as parameter to Insert_ID() to correctly retrive the id under postgres and MaxDB

This commit is contained in:
Ralf Becker 2004-08-03 23:03:38 +00:00
parent 1ef5e6e3ad
commit 5f8de74a2a
2 changed files with 9 additions and 5 deletions

View File

@ -902,12 +902,14 @@
} }
/** /**
* @param $table string name of the table, not needed by all databases (eg. mysql), default ''
* @param $column string name of the column, not needed by all databases (eg. mysql), default ''
* @return the last inserted ID. Not all databases support this. * @return the last inserted ID. Not all databases support this.
*/ */
function Insert_ID() function Insert_ID($table='',$column='')
{ {
if ($this->_logsql && $this->lastInsID) return $this->lastInsID; if ($this->_logsql && $this->lastInsID) return $this->lastInsID;
if ($this->hasInsertID) return $this->_insertid(); if ($this->hasInsertID) return $this->_insertid($table,$column);
if ($this->debug) { if ($this->debug) {
ADOConnection::outp( '<p>Insert_ID error</p>'); ADOConnection::outp( '<p>Insert_ID error</p>');
adodb_backtrace(); adodb_backtrace();
@ -925,7 +927,7 @@
function PO_Insert_ID($table="", $id="") function PO_Insert_ID($table="", $id="")
{ {
if ($this->hasInsertID){ if ($this->hasInsertID){
return $this->Insert_ID(); return $this->Insert_ID($table,$id);
} else { } else {
return $this->GetOne("SELECT MAX($id) FROM $table"); return $this->GetOne("SELECT MAX($id) FROM $table");
} }

View File

@ -150,10 +150,12 @@ WHERE relkind = 'r' AND (c.relname='%s' or c.relname = lower('%s'))
Using a OID as a unique identifier is not generally wise. Using a OID as a unique identifier is not generally wise.
Unless you are very careful, you might end up with a tuple having Unless you are very careful, you might end up with a tuple having
a different OID if a database must be reloaded. */ a different OID if a database must be reloaded. */
function _insertid() function _insertid($table,$column)
{ {
if (!is_resource($this->_resultid) || get_resource_type($this->_resultid) !== 'pgsql result') return false; if (!is_resource($this->_resultid) || get_resource_type($this->_resultid) !== 'pgsql result') return false;
return pg_getlastoid($this->_resultid); $oid = pg_getlastoid($this->_resultid);
// to really return the id, we need the table and column-name, else we can only return the oid != id
return empty($table) || empty($column) ? $oid : $this->GetOne("SELECT $column FROM $table WHERE oid=".(int)$oid);
} }
// I get this error with PHP before 4.0.6 - jlim // I get this error with PHP before 4.0.6 - jlim