Foros del Web » Programando para Internet » PHP »

PDO, Chequear antes de Insertar

Estas en el tema de PDO, Chequear antes de Insertar en el foro de PHP en Foros del Web. Hola Amigos, Mi Escenario: Tengo un problema y he intentado buscar una solución pero aún ando sin resultados positivos. Tengo una tabla la cual debo ...
  #1 (permalink)  
Antiguo 17/12/2012, 10:05
 
Fecha de Ingreso: junio-2011
Mensajes: 80
Antigüedad: 12 años, 10 meses
Puntos: 8
PDO, Chequear antes de Insertar

Hola Amigos,

Mi Escenario:
Tengo un problema y he intentado buscar una solución pero aún ando sin resultados positivos.

Tengo una tabla la cual debo actualizar automaticamente desde un archivo en un FTP. Este archivo se crea diariamente y constatemente está introduciendo reportes nuevos (líneas en él) durante el día.

Yo lo tomo, lo leo e inserto cada línea en una tabla de mi BD.

Tengo declarado Primery Key el campo día y hora para evitar reportes duplicados.

Hasta aquí todo funciona correctamente.

Problema:
Al intentar insertar el archivo a las 8 de la mañana por ejemplo, y es el primer intento en el día, se realiza sin problemas.

Si se realiza esta actualización una vez más a las 10 AM, que debe hacerce durante el día, ya que constatemente el archivo agrega nuevos reportes. El archivo por supuesto contine también los reportes que se insertaron a las 8 AM y los nuevos.

Aquí es cuando PDO me devuele un error que ya existen esos reportes. Las líneas que ya tengo en mi BD anteriormente y no puede dupicarse porque son Primary Key.

Error:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry

Pregunta:
Cómo puedo chequear en mi BD antes de actualizarla que no existan esos reportes con día y hora para no intentar insertarlos y que PDO me devuelva este error ??

Comentario:
Intenté con un bloque Try, Catch pero asi tido me continua saliendo el mismo error en pantalla.

Código PHP:
try
{
      
$sql "INSERT INTO table VALUES (campo_1, etc...)";
}
catch(
PDOException $e)
{
      
$e->getMessage();

Por supuesto si quito PDO::ERRMODE_WARNING no me sale el error, pero es porque estoy diciendole que no me lo muestre y lo que quiero es solucionar el intento de insertar antes de que detecte que sería un duplicate entry

Gracias por su ayuda de antemano.
  #2 (permalink)  
Antiguo 17/12/2012, 10:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: PDO, Chequear antes de Insertar

Cita:
Al intentar insertar el archivo a las 8 de la mañana por ejemplo, y es el primer intento en el día, se realiza sin problemas.

Si se realiza esta actualización una vez más a las 10 AM, que debe hacerce durante el día, ya que constatemente el archivo agrega nuevos reportes. El archivo por supuesto contine también los reportes que se insertaron a las 8 AM y los nuevos.
¿Y te has asegurado que cada vez que tome ese archivo, sólo lea las lineas que aún no han sido insertadas?
Piensa que si ese archivo va siendo actualizado agregando lineas en él, entonces las primeras ya se han insertado al momento de la segunda lectura...
No basta con insertar, hay que verificar primero, o indicarle simplemente que ignore las inserciones si el DATETIME se duplica.
Un simple INSERT IGNORE INTO... te va a funcionar., pero sólo sería práctico si lso datos de esos registros realmente no se deben ingresar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 17/12/2012, 10:36
 
Fecha de Ingreso: junio-2011
Mensajes: 80
Antigüedad: 12 años, 10 meses
Puntos: 8
Respuesta: PDO, Chequear antes de Insertar

Hola gnzsoloyo, gracias por tu pronta respuesta.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
¿Y te has asegurado que cada vez que tome ese archivo, sólo lea las lineas que aún no han sido insertadas?
Creo que aquí está mi problema, que no sé como chequear cada vez que leo el archivo, que es un CSV, que comience a leer desde la última línea que inserté en la BD.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Un simple INSERT IGNORE INTO... te va a funcionar., pero sólo sería práctico si lso datos de esos registros realmente no se deben ingresar.
Exactamente como piensas, estos datos que ya se encuentran insertado de la vez anterior en mi BD no deberían ser insertado nuevamente, por lo que creo que este segundo consejo que me das me funcionará para la respuesta que ando buscando.

No sabía que existía esta opción en MySQL de "INSERT IGNORE INTO".

Lo intentaré y te dejaré saber.

Muchas Gracias.
  #4 (permalink)  
Antiguo 17/12/2012, 10:43
 
Fecha de Ingreso: junio-2011
Mensajes: 80
Antigüedad: 12 años, 10 meses
Puntos: 8
Respuesta: PDO, Chequear antes de Insertar

Hola gnzsoloyo,

Te confirmo que tu segundo consejo es la respuesta que llevaba buscando por horas.

Muchas gracias una vez más por tu ayuda y tu solución brindada, que me funcionó correctamente.

SOLUCIONADO !!!
  #5 (permalink)  
Antiguo 17/12/2012, 10:49
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: PDO, Chequear antes de Insertar

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: chequear, pdo, resultados, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:57.