Re: DB_Object->insert() not returning ID

From: Date: Mon, 29 Nov 2004 23:23:11 +0000
Subject: Re: DB_Object->insert() not returning ID
References: 1 2 3 4  Groups: php.pear.general 
Request: Send a blank email to pear-general+get-15911@lists.php.net to get a copy of this message
On Mon, 29 Nov 2004 15:19:15 -0800, Ken Restivo <ken@restivo.org> wrote: > On Mon, Nov 15, 2004 at 10:46:12AM -0800, Justin Patrin wrote: > > On Sun, 14 Nov 2004 21:23:06 -0800, Ken Restivo <ken@restivo.org> wrote: > > > On Sun, Nov 14, 2004 at 07:36:41PM -0800, Ken Restivo wrote: > > > > One more: inserts succeed but always return 1 as an ID. > > > > > > > > I supposed I can hack around this with a raw query for last_insert_id(), but the > > > > docs say insert() should return this. > > > > > > > > > > OK well I did this, but I'm still kind of suspicious about why I had to: > > > > > > function lastInsertID($obj) > > > { > > > $db =& $obj->getDatabaseConnection(); > > > > > > $data =& $db->getOne('select last_insert_id()'); > > > if (DB::isError($data)) { > > > die($data->getMessage()); > > > } > > > return $data; > > > } > > > > > > > Looking at the DB_DataObject code, insert() says it returns true, > > false, or 0. Looks like the online docs are wrong. Look at the online > > API docs. > > > > Thanks. The API docs also have the wrong information in the main body (about returning the last > inserted ID), but with a note that says "mysql-specific? fixme". My fault for missing > that, I guess. It does describe the return value correctly. > > I read somewhere that the inserted ID gets inserted into the object after the ->insert(). Is > that a reliable, safe way to get the last inserted ID? > > I think what I'm saying is, I can't believe that I have to write a utility function > (and then subclass DBDO or copy/paste it) to get the last inserted ID. It seems like a very common > thing and somewhere in the DBDO docs I must have overlooked the "officially-approved" way > to do it. > When I use DB_DataObject (please call it that, not DB_Object) the id is in the object after the insert() call. Of course, I'm using mysql. I have no idea about other RDBMS. -- Justin Patrin

« previous php.pear.general (#15911) next »