我正在将图片文件上传到存储服务器。在上传之前,我应该编写文件名,其中包含AUTOINCREMENT VALUE(例如,12345_filename.jpg)。
如何在插入数据库之前获得自动增量值?
我只看到一个解决方案
还有其他解决方案吗?
谢谢
答案 0 :(得分:13)
当插入完成时,自动增量值由数据库本身生成;这意味着在进行实际的插入查询之前,你无法获得它。
您提出的解决方案不是经常使用的解决方案 - 这将是:
where
查询的update
子句中先前生成的自动增量来更新行以放置新/完整数据,以确定正在更新哪一行。当然,作为安全预防措施,所有这些操作都必须在事务中进行(以确保“全有或全无”行为)
作为伪代码:
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
答案 1 :(得分:7)
好吧,试试这个:
$query = "SHOW TABLE STATUS LIKE 'tablename'";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
var_dump($row);
输出:
array(18) {
[...]
["Auto_increment"]=> string(4) "3847"
[...]
}
这将是您的下一个auto_increment ID。
答案 2 :(得分:1)
没有解决方案。插入新行,完全停止时,您将获得自动增量值。插入和删除无济于事,因为下一个自动增量值将高一个。可能多个客户端同时与数据库通信,您无法预测下一个值,因为它可能会在您的猜测和实际插入之间递增。
寻找其他解决方案。插入一行并稍后更新,或者为文件名生成一个独立于自动增量ID的id。
答案 3 :(得分:1)
如果你使用PDO ,这是一个“单行”解决方案:
$nextId = $db->query("SHOW TABLE STATUS LIKE 'tablename'")->fetch(PDO::FETCH_ASSOC)['Auto_increment'];
其中tablename
被您的表替换。
答案 4 :(得分:0)
答案 5 :(得分:0)
INSERT INTO CONTACTS1(firstname,lastname)值('hi',从information_schema.TABLES中选择auto_increment,其中TABLE_NAME ='CONTACTS1'和TABLE_SCHEMA ='test')
ID是主要密钥&自动编号栏。
答案 6 :(得分:-1)
使用单独的表作为计数器,如postgresql序列,并且不要在主表中使用auto_increment。
答案 7 :(得分:-2)
这是旧的,但如果其他人需要它。
您可以在“ information_schema ”表格中获得此类价值,您可以在此处执行此类操作
select AUTO_INCREMENT from TABLES where TABLE_SCHEMA = 'You're Database' and TABLE_NAME = 'Table Name'
所以这种元数据总是存储在Information_schema中。
答案 8 :(得分:-4)
使用mysql_insert_id()
获取最后一个ID,然后使用+ 1