Reputation: 16596
I'm uploading image file to storage server. Before uploading I should compose filename, which contains AUTOINCREMENT VALUE in it (for example, 12345_filename.jpg).
How could I get autoincrement value before inserting into DB?
I see only one solution
Is there any other solutions?
Thank you
Upvotes: 11
Views: 23620
Reputation: 3712
If you are using PDO, here is a "single line" solution :
$nextId = $db->query("SHOW TABLE STATUS LIKE 'tablename'")->fetch(PDO::FETCH_ASSOC)['Auto_increment'];
where tablename
is replaced by your table.
Upvotes: 2
Reputation: 10967
Well this is to old ,but if someone else need it.
You can get this kind of value at "information_schema" table where you could do something like
select AUTO_INCREMENT from TABLES where TABLE_SCHEMA = 'You're Database' and TABLE_NAME = 'Table Name'
So this kind of Meta Data are always stored in Information_schema .
Upvotes: -2
Reputation: 9
INSERT INTO CONTACTS1 (firstname, lastname) values('hi', select auto_increment from information_schema.TABLES where TABLE_NAME='CONTACTS1' and TABLE_SCHEMA='test')
Where ID is the Primary Key & Auto number column.
Upvotes: 0
Reputation: 98398
Use a separate table just as a counter, like a postgresql sequence, and don't use auto_increment in your main table(s).
Upvotes: 0
Reputation: 449425
@Pascal Martin makes a good point. In cases like this, I personally like to add another ID column, containing a random, 16-digit ID (which will also be the "public" ID in web apps and on web sites for security reasons). This random ID you can set beforehand in your application, work with it, and then set when the record is actually created.
Upvotes: 0
Reputation: 12433
well, try this:
$query = "SHOW TABLE STATUS LIKE 'tablename'";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
var_dump($row);
output:
array(18) {
[...]
["Auto_increment"]=> string(4) "3847"
[...]
}
This will be your next auto_increment ID.
Upvotes: 8
Reputation: 401002
The autoincrement value is generated by the database itself, when the insertion is done ; which means you cannot get it before doing the actual insert query.
The solution you proposed is not the one that's often used -- which would be :
where
clause of the update
query, to identify which row is being updated.Of course, as a security precaution, all these operations have to be made in a transaction (to ensure a "all or nothing" behavior)
As pseudo-code :
begin transaction
insert into your table (half empty values);
$id = get last autoincrement id
do calculations
update set data = full data where id = $id
commit transaction
Upvotes: 14
Reputation: 522083
There is no solution. You get the auto-increment value when you insert a new row, full stop. Inserting and deleting won't help, since the next auto-increment value will be one higher. Do to possibly multiple clients talking to the database at the same time, you can't predict the next value since it might be incremented between your guessing and your actual insert.
Find a different solution. Either insert a row and update it later, or generate an id for the filename that's independent of the auto-increment id.
Upvotes: 1