Adam Prime wrote:
Perrin Harkins wrote:
On Sat, May 15, 2010 at 4:03 PM, Anthony Esposito
<tony.m.espos...@gmail.com> wrote:
In one of my programs I started to receive database errors for not
having a
unique id. I generate unique ids for each of the mysql lines that I
add to
the database. I realized that the perl variable $idNum was keeping
the same
random string for multiple executions.
You need to call srand() in s a child init handler:
http://marc.info/?l=apache-modperl&m=123904225030744&w=1
However, I have to ask, why are you generating id numbers randomly?
Why not just let mysql do it with auto_increment?
- Perrin
I think, in theory you shouldn't have to explicitly srand yourself in
your startup.pl if you're using mod_perl 1.29 or greater, and perl 5.8.1
or greater.
see:
http://marc.info/?l=apache-modperl-dev&m=106606815110220&w=2
Also see : perldoc -f srand
and
http://en.wikipedia.org/wiki/Murphy%27s_law
With the second, I mean that even if the rand() sequence is different in
different Apache children and cgi-bin's or modules called by these
children, that still does not mean that the same number could not be
generated occasionally. Especially if this over a long period of time,
and the result is stored in a database.
So I would either use what Perrin mentioned, or combine the result of (a
shorter) rand() call, with time() for example.
A tip : to get a really unique identifier, I often use
"yyyymmddhhmmssrrrrr", where rrrrr is the rand() result, and the prefix
is the date/time. Unless you process more than 99,999 requests per
second, it will always be unique. In addition, such an identifier is at
the same time a time stamp, which is often invaluable in tracking down a
problem.