Re: DB_Object->insert() not returning ID
| From: | Justin Patrin | 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