Mi consulta es la siguiente:
Tengo un proceso en la cual el usuario selecciona un archivo a importar (.CSV,.TXT Y .BACKUP). Cada fila usa un delimitador "|" para diferencias el valor de un campo de otro. Mi problema es que no sé si estoy usando bien las transacciones (BEGIN, ROLLBACK Y COMMIT). Ya que si bien no se registran las operaciones que están mal,
el auto_increment de mi tabla sigue aumentando por sí solo, como si en realidad registrase algo, pero no es así
![U_U](http://static.forosdelweb.com/fdwtheme/images/smilies/nods.png)
Mi código es extenso, pero igual dejo una gran parte de ello.
Código PHP:
De antemano gracias por darle una chequeadita. Ver original
$dblink=fConectar("estadisticas"); $sEstructuraDet="INSERT INTO movement_of_vessel_det(cod_movement_of_vessel,nitem,qtty, cod_cargo,cod_port_orig,cod_port_dest,cod_shipper,cod_receiver,cod_tracing)VALUES"; if($nFilaCont>=$nFilaDefaultIni){//INICIO DE IMPORTACION //ID|VESSEL|GRT|OPERATION|COUNTRY (ORIG)|PORT (ORIG)|COUNTRY (DEST)|PORT //(DEST)|ARRIVED|BERTHED|COMPLETED|AGENT|OWNER|CHARTERER|CARGO_TYPE|CARGO|QTTY|SHIPPER|RECEIVER|REMARKS $sVessel=trim($aDatos[1]);$fGRT=(strlen($aDatos[2])>0?str_replace(",","",$aDatos[2]):0);$sOperation=trim($aDatos[3]); if(!$respInsertDET){ }else{ $nTotRegValid++; } } $sQueryIDOpetation="SHOW TABLE STATUS LIKE 'movement_of_vessel'"; $aIDOperation=faResultQuery_vImport($sQueryIDOpetation,$dblink); $cod_movement_of_vessel=($aIDOperation['error']==true?0:$aIDOperation['Auto_increment']); $aIDTbl[$nIDOperacion]=$cod_movement_of_vessel;//GUARDA TEMPORALMENTE EL ID AUTO EN UN ARRAY $cod_vessel=""; $sQueryVessel="SELECT cod_vessel,dsc_vessel FROM vessel WHERE TRIM(dsc_vessel)='".trim($sVessel)."'"; $aVessel=faResultQuery_vImport($sQueryVessel,$dblink); $cod_vessel=($aVessel['error']==true?0:$aVessel['cod_vessel']);//echo $sVessel."->".$cod_vessel."\n"; } $cod_operation=""; $sQueryOperation="SELECT cod_operation,dsc_operation FROM operation WHERE TRIM(dsc_operation)='".trim($sOperation)."'"; $aOperation=faResultQuery_vImport($sQueryOperation,$dblink); $cod_operation=($aOperation['error']==true?0:$aOperation['cod_operation']); } $xsArrived=fsChangeFormartDate($sArrived,"d/m/y","y-m-d"); //strlen($sArrived)>0 and $aErr[$nContErr]['id']=$nIDOperacion; $aErr[$nContErr]['fila']=$nFilaCont; $aErr[$nContErr]['columna']=9; $aErr[$nContErr]['descripcion']="(ARRIVED) El dato ingresado no es de tipo fecha"; $nContErr++; } $cod_agent=""; $aAgent=faResultQuery_vImport($sQueryAgent,$dblink); $cod_agent=($aAgent['error']==true?0:$aAgent['cod_agent']); } $cod_owner=""; $aOwner=faResultQuery_vImport($sQueryOwner,$dblink); $cod_owner=($aOwner['error']==true?0:$aOwner['cod_owner']); } $cod_charterer=""; $sQueryCharterer="SELECT cod_charterer,dsc_charterer FROM charterer WHERE TRIM(dsc_charterer)='".trim($sCharterer)."'"; $aCharterer=faResultQuery_vImport($sQueryCharterer,$dblink); $cod_charterer=($aCharterer['error']==true?0:$aCharterer['cod_charterer']); } $sQueryInsertCAB="INSERT INTO movement_of_vessel(cod_movement_of_vessel,cod_vessel,cod_operation,arrived, berthed,completed,cod_agent,cod_owner,cod_charterer,remarks,record_date,record_cod_user, active)VALUES(" else if($sBerthed=="-" or $sBerthed=="") $sQueryInsertCAB.="0000-00-00,"; else if($sCompleted=="-" or $sCompleted=="") $sQueryInsertCAB.="0000-00-00,"; ."CURRENT_DATE(),".$arrayDatosUser[0].",1)"; if(!$respInsertCAB ){ //echo $sQueryInsertCAB."\n".mysql_error($dblink); $aErr[$nContErr]['id']=$nIDOperacion; $aErr[$nContErr]['fila']=$nFilaCont; $aErr[$nContErr]['columna']="ALL"; $aErr[$nContErr]['descripcion']="Los datos de importación ya han sido registrados.<br/> Ref: Los campos VESSEL, ARRIVED Y OPERATION no pueden duplicarse."; $nContErr++; } } }//FIN CAB OPERACIONES $cod_cargo=""; $aCargo=faResultQuery_vImport($sQueryCargo,$dblink); $cod_cargo=($aCargo['error']==true?0:$aCargo['cod_cargo']); } $cod_port_orig=""; $aPortOrig=faResultQuery_vImport($sQueryPort,$dblink); $cod_port_orig=($aPortOrig['error']==true?0:$aPortOrig['cod_port']); } $cod_port_dest=""; $aPortDest=faResultQuery_vImport($sQueryPort,$dblink); $cod_port_dest=($aPortDest['error']==true?0:$aPortDest['cod_port']); } $cod_shipper=""; $sQueryShipper="SELECT cod_shipper,dsc_shipper FROM shipper WHERE TRIM(dsc_shipper)='".trim($sShipper)."'"; $aShipper=faResultQuery_vImport($sQueryShipper,$dblink); $cod_shipper=($aShipper['error']==true?0:$aShipper['cod_shipper']); } $cod_receiver=""; $sQueryReceiver="SELECT cod_receiver,dsc_receiver FROM receiver WHERE TRIM(dsc_receiver)='".trim($sReceiver)."'"; $aReceiver=faResultQuery_vImport($sQueryReceiver,$dblink); $cod_receiver=($aReceiver['error']==true?0:$aReceiver['cod_receiver']); } //INSERT DETALLE $aInsertCamposDet[]="( ."".$nNumItem.",".$fQtty."," $nNumItem++; }else{ $aErr[$nContErr]['id']=$nIDOperacion; $aErr[$nContErr]['fila']=$nFilaCont; $aErr[$nContErr]['columna']="ALL"; $aErr[$nContErr]['descripcion']="La fila debe de contar con 20 Columnas para la importación<BR>REF:Asegúrese que en los valores de las celdas no usen como primer carácter \" o '"; $nContErr++; } } $nFilaCont++; } if(!$respInsertDET){ }else{ $nTotRegValid++; } }
IMPORTANTE: La importación se realiza en 2 tablas movement_of_vessel (CABECERA) y movement_of_vessel_det (DETALLE),si un registro del detalle esta mal debe de cancelarse sólo esa operación no de las demás.Con esta variable diferencio una operación de otra $nIDOperacion=trim($aDatos[0]);
Saludos
![sonriente](http://static.forosdelweb.com/fdwtheme/images/smilies/smile.png)