Solved

php,mysqli, and last_insert_id()

Posted on 2004-08-21
4
2,072 Views
Last Modified: 2008-01-09
using PHP 5, mysqli extension, and mysql 4.1.3:  according to the mysql documentation, last_insert_id returns the last autoincremented value from an insert OR update.  ...but, how would you get an update query to autoincrement?
When I set an autoincrement field to a number I created, insert_id() returns 0.

Q: I need to get an updated record's primary key without having to submit a subsequent SELECT statement.  Allowing two consecutive statements (UPDATE, then SELECT) might allow another UPDATE to occur (in a multiuser environment) before the Select statement could be called, returning the second record's primary key value instead.  ...and 'no', I don't know the PK value I just updated, because my statement was 'UPDATE PK SET PK = PK+1 WHERE 1 LIMIT 1'
Reason: I have a single field , single value  table I use to maintain a counter.
0
Comment
Question by:stevolicious
  • 2
4 Comments
 
LVL 3

Expert Comment

by:pat5star
Comment Utility
MySQL guarantees that it will return the correct PK value of an insert even if there are simultaneous inserts occurring. The only thing you have to be sure of is that you use the same connection to the database for both the insert and then the SELECT LAST_INSERT_ID(). So if you obtain a connection, insert some data and then query for the last insert id before closing that connection you will always get the correct PK.
0
 

Author Comment

by:stevolicious
Comment Utility
...but what if the last statement was an update that sets the PK field to PK+1 (not autoincremented, not an insert).  Is there an update statement that would autoincrement the PK?...and does last_insert_id() truly work with updates as mentioned in the documentation?
0
 
LVL 3

Accepted Solution

by:
pat5star earned 25 total points
Comment Utility
That I don't know. I never change the PK field of any of my tables. Without knowing what (or why) you're doing it this way it's hard to offer advice. I would think that adding another field to your table that you use as the id field might be easier to work with. That way you can use the PK as the identifier of which row you are working on while you manipulate the value of your id field.
0
 
LVL 15

Assisted Solution

by:JakobA
JakobA earned 225 total points
Comment Utility
potentially an UPDATE command can affect any number of rows, it does not make sense to have a last_affected_id() function. (and no, last_insert_id() do not give a meaningfull value after UPDATE, I think the reference is to the ON DUPLICATE KEY option that can turn an insert into an update if nessesarry)

so do a select first finding the id of the row to be updated, then do the update.

regards JakobA
0

Featured Post

What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

Join & Write a Comment

Introduction In this article, I will by showing a nice little trick for MySQL similar to that of my previous EE Article for SQLite (http://www.sqlite.org/), A SQLite Tidbit: Quick Numbers Table Generation (http://www.experts-exchange.com/A_3570.htm…
Introduction Since I wrote the original article about Handling Date and Time in PHP and MySQL (http://www.experts-exchange.com/articles/201/Handling-Date-and-Time-in-PHP-and-MySQL.html) several years ago, it seemed like now was a good time to updat…
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, Just open a new email message.  In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now