Re: getting serial in PHP

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On Mon, 31 Mar 2003, Roger 'Rocky' Vetterberg wrote:

> [Snip]
>
>
> >>About the second suggestion, just pulling the data back out; I could
> >>do that, but the only thing that is unique in the string is the
> >>timestamp. Theoretically, on a busy site even that could be identical
> >>in two rows. (Since timestamp is in one millionth of a second, its not
> >>very likely but could happen)
> >>So if I do a search on the data I just inserted, I could get two or
> >>more hits, and there would be no way for me to tell which one is the
> >>one Im after.
> >>
> >>Im new to both php and sql, but I keep thinking things like this must
> >>be done every day on thousands of sites. I just cant figure out how to
> >>do it, any suggestions?
> >
> >
> > What I do, when I need to reference an ID from a sequence after I do the
> > INSERT, is I get the next number in the sequence /before/ inserting the data
> > into the table, like so:
> >
> > $res = pg_query($conn, "select nextval('my_seq');");
> > $row = pg_fetch_array($res);
> > $id = $row['nextval'];
> > $res = pg_query($conn, "insert into my_table values ($id, 'value',
> > 'value');");
> > //Error checking here...
> > echo "Your submission was accepted with ID $id";
> >
> > Since you are just getting the next value of the sequence, your data is safe
> > from having non-unique id numbers, as long as you always call nextval() in
> > order to get your id number. Any subsequent calls to nextval() will return
> > the next number, regardless of whether you use the $id returned by the first
> > query.
> >
> > Hope that helps.
> >
> > ________________________________________
> > Nathaniel Price http://www.thornvalley.com
> > "Who is General Failure and why is he reading my hard drive?"
>
>
> For future reference, here is the code snippet that finally
> worked for me:
> --
> $res = pg_query($connection, "select
> nextval('public.logs_log_id_seq'::text);");
>
> $row = pg_fetch_array($res);
> $log_id = $row['nextval'];
>
> $query = "insert into logs values
> ($log_id,$id,'$logtext','now','$_SERVER[PHP_AUTH_USER]');";
> $result = pg_query($connection, $query) or die("Error in query:
> $query. " .pg_last_error($connection));
> --
>
> The data is stored, and the counter value is saved in $log_id and
> available for use.
>
> Thanks to all those that helped!
>
> --
> R

Let me suggest a shorthand for the above. Since the query only
returns one result, there is no need to fetch an array. Just use
pg_fetch_result to get the value. In fact, you can even nest the
calls, like so:

$log_id = pg_fetch_result(pg_query($connection, "select
nextval('public.logs_log_id_seq'::text);"), 0, 0)
or die(pg_result_error());

This saves a little bit of memory too, since you aren't making two extra
assignments to get your $log_id.

Next, just turn this into a nice little PHP function, so you can do
$log_id = getNextVal('sequencename');


-- 
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [PHP Users]     [Postgresql Discussion]     [Kernel Newbies]     [Postgresql]     [Yosemite News]

  Powered by Linux