php - registro - SQL-INSERTE y capture el valor de incremento automático de ID
insertar registro auto_increment sql (7)
¿Cuál es la mejor manera de obtener el valor de auto-id en el mismo SQL con un SELECT?
Un foro dijo que agregar esto " ; has Return Scope_Identity()
"
Al final del SQL trabaja en ASP.
¿Hay una forma correspondiente en PHP?
Depende de su servidor de base de datos. Usando MySQL, llame a mysql_insert_id()
inmediatamente después de su consulta de inserción. Con PostgreSQL, la primera consulta " select nextval(seq)
" en la secuencia e incluye la clave en su consulta de inserción.
La consulta para " select max(id) + 1 from tbl
" podría fallar si otra solicitud inserta un registro simultáneamente.
Depende del motor de base de datos que esté utilizando. Algunos DBMS, como Firebird, por ejemplo, tienen una cláusula de RETORNO que puede agregar a su consulta. Por ejemplo, si tiene una tabla llamada TABLE1 con una columna de autoincremento llamada ID, puede usar esto:
insert into TABLE1(columns...) values (values...) returning ID;
Y devolvería la ID insertada al igual que una declaración de selección regular.
En Microsoft Transact SQL puedes usar @@ IDENTITY.
p.ej
DECLARE @Table TABLE ( col0 INT IDENTITY, col1 VARCHAR(255), col2 VARCHAR(255))
INSERT INTO @Table (col1, col2) VALUES (''Hello'',''World!'')
SELECT @@Identity
SELECT * FROM @Table
En SQL Server, una inserción que use la instrucción de selección puede tener una cláusula de salida que devolverá el valor de identidad y cualquier otra columna que necesite para identificar qué identidad va a qué registro. Si está utilizando una cláusula de valores, utilice select scope_identity () inmediatamente después de la inserción.
En php: mysql_insert_id () http://us3.php.net/mysql_insert_id
o
Si desea genterar el número de su consulta de selección de mySql, puede usar este EDITAR:
SELECT LAST_INSERT_ID(`1`) + 1 FROM table
En postgres la mejor manera es hacer algo como:
insert into foos(name) values (''my_foo'') returning id;
Tenga mucho cuidado: al parecer, seleccionar nextval (seq) no funciona en alta concurrencia; otra conexión puede insertarse entre el momento en que insertó y el momento en que llamó select nextval (seq). Siempre pruebe este código en arneses de prueba de alta concurrencia.