Reputation: 15275
I'm inserting a row in the users table to register a new user. I want to get the user_id field (which is Auto Increment) and user it in another queries. A solution is provided in here: How to get the ID of INSERTed row in mysql? but I wonder what will happen if another user gets registered right after I insert a new row, and before I run the mysql_insert_id() function in my php code. What will the function return?
Upvotes: 0
Views: 329
Reputation: 1803
int mysql_insert_id ([ resource $link_identifier ] )
is your friend.
From the php documentation: http://es2.php.net/manual/en/function.mysql-insert-id.php
Notes:
The MySQL connection. If the link identifier is not specified, the last link opened by mysql_connect() is assumed. If no such link is found, it will try to create one as if mysql_connect() was called with no arguments. If no connection is found or established, an E_WARNING level error is generated.
The ID generated for an AUTO_INCREMENT column by the previous query on success, 0 if the previous query does not generate an AUTO_INCREMENT value, or FALSE if no MySQL connection was established.
mysql_insert_id() will convert the return type of the native MySQL C API function mysql_insert_id() to a type of long (named int in PHP). If your AUTO_INCREMENT column has a column type of BIGINT (64 bits) the conversion may result in an incorrect value. Instead, use the internal MySQL SQL function LAST_INSERT_ID() in an SQL query. For more information about PHP's maximum integer values, please see the integer documentation.
Because mysql_insert_id() acts on the last performed query, be sure to call mysql_insert_id() immediately after the query that generates the value.
The value of the MySQL SQL function LAST_INSERT_ID() always contains the most recently generated AUTO_INCREMENT value, and is not reset between queries.
Upvotes: 1
Reputation: 270727
mysql_insert_id()
returns the auto_increment
id specific to the current connection (which is specific to the user session). So, it's safe from that type of race condition. In other words, two concurrently connected users whose inserts overlap one another will always get back the correct ids for their own sessions without interference.
Upvotes: 7