Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/06/2010, 15:04
Diego89
 
Fecha de Ingreso: enero-2010
Mensajes: 19
Antigüedad: 14 años, 3 meses
Puntos: 2
Concurrencia al momento de insertar un registro

Esto es una duda que tengo y me gustaria saber si esta bien lo que estoy haciendo haber les dejo el problema.

El usuario 1 se conecta a mi aplicativo web y llena un formulario, ahora el usuario 2 llena el mismo formulario y los dos dan guardar al mismo tiempo, el problema es con el id que yo lo tengo que autogenerar (Capricho mio :) ) para eso hago un select a mi tabla y recupero el ultimo codigo y le sumo mas 1, tengo que bloquear mi tabla para evitar id duplicada.
Ahora asi es como lo hago:
Código PHP:
Ver original
  1. $db->consulta("LOCK TABLES notasalida AS ns READ, notasalida WRITE");
  2. $cn = $db->consulta('SELECT MAX(ns_c_id) as codigo FROM notasalida');
  3. $data = $db->fetch_assoc($cn);
  4. $cod = substr($data['codigo'],2);
  5. $cod = $cod + 1;
  6. $ncod = strlen($cod);
  7. switch($ncod){
  8.     case 1 : $ncod = "NS00000".$cod;break;
  9.     case 2 : $ncod = "NS0000".$cod;break;
  10.     case 3 : $ncod = "NS000".$cod;break;
  11.     case 4 : $ncod = "NS00".$cod;break;
  12.     case 5 : $ncod = "NS0".$cod;break;
  13. }
  14. $query = "INSERT INTO notasalida  VALUES('$ncod','$cboAlmacen','$txtFecha','$cboRecibido','$cboMotivo','$txtReferencia','$txtObservacion','$cboAutorizacion','$txtSolicitante')";
  15. $cn = $db->consulta($query);
  16. $db->consulta('UNLOCK TABLES');


Me gustaría saber si esta bien o no la forma que lo hago, la tabla es MySam.
Si habrá otra forma mejor de hacerla y con un ejemplito estaría mejor :D!