Ver Mensaje Individual
  #5 (permalink)  
Antiguo 02/05/2011, 09:29
jonyou
 
Fecha de Ingreso: abril-2011
Ubicación: MEXICO
Mensajes: 42
Antigüedad: 13 años
Puntos: 0
Respuesta: despues de una Alta que me muestre la clave primaria

Cita:
Iniciado por gnzsoloyo Ver Mensaje
PHP tiene una función propia en su librería de conexión a MySQL que te devuelve precisametne la ultima ID autoincremental generada en un INSERT.
La puedes ver en el manual de referencia on-line de PHP: [URL="http://ar2.php.net/manual/es/"]PHP:: Manual de PHP[/URL]
Librería MySQL: [URL="http://ar2.php.net/manual/es/function.mysql-insert-id.php"]mysql_insert_id() [/URL]— Obtiene la ID generada en la última consulta
Librería MYSQLI (POO): [URL="http://ar2.php.net/manual/es/mysqli.insert-id.php"]mysqli->insert_id[/URL] — Returns the auto generated id used in the last query

En los links encontrarás ejemplos de su uso bastante simples y comprensibles.

Una PK autoincremental no se puede repetir. Jamás. Lo que tienes que hacer es dejarle a MySQL el generarla y no andar consultando su último valor para crearla por ti mismo, especialmente si no vas a usar transacciones en tu gestion de la base (te recomiendo enfáticamente utilizarlas). En ese caso debes puedes mandar el INSERT indicando qué campos insertarás y omitiendo de la lista el de la PK. MySQL asumirá que ese valor es NULL y lo generará automáticamente.
Si no quieres indicar los campos a insertar lo que tienes que hacer es enviar un NULL en el lugar de la PK y MySQL se encargará del resto.
Ppara usar el valor devuelto en el autonumérico, simplemente lo invocas desde esa función en la siguiente sentencia.
Otra forma de gestionar todo es usar stored proedures, que además tienen otras ventajas, como seguridad, evitar el sql-injection, y el manejo de operaciones atómicas.. No sé si estás práctico con el tema.
Si no quieres usar transacciones, entonces lo que debes hacer es bloquear la tabla al momento de hacer la consulta del último valor, de modo de hacer una reserva de próxima ID. Eso se hace haciendo un
Código MySQL:
Ver original
  1. SELECT MAX(id) FROM tabla FOR UPDATE;

Consulta los detalles en el manual de referencia, si quieres: [URL="http://dev.mysql.com/doc/refman/5.0/es/innodb-next-key-locking.html"][B]MySQL AB MySQL 5.0 Reference Manual[/B][/URL]
Gracias por la liga de bloqueo, me será útil!!!