Ver Mensaje Individual
  #16 (permalink)  
Antiguo 30/12/2011, 03:31
Avatar de gnzsoloyo
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, 5 meses
Puntos: 2658
Respuesta: Obtener id de registro ingresado

Yo estoy entendiendo perfectamente, pero tu no estás siguiendo la lógica que te propongo en ese código.
Cita:
Pero como dije antes, que pasa si cuando alguien ingresa el tag manzana, este ya esta en mi tabla tags, entonces es ignorada la petición de agregar un nuevo id, por lo tanto mysql_insert_id es 0, lo cual esta mal.
Si te fijas con cuidado, en el código propuesto, si el primer INSERT falla, el resultado es cero y $result devuelve FALSE, por lo que el segundo INSERT no se realiza.
Un result de mysql_query() no sólo es un resultado a nivel de consulta, es TRUE o FALSE si la operación es exitosa. SI falla es FALSE.
En esencia,el If() que te pongo es igual a poner if($nuevoId > 0).
Por otro lado, es muchísimo más simple que si el campo "Tag" de la tabla "tags" va a tener valores únicos, lo definas como UNIQUE. Entonces simplemente la base no te dejará ingresar valores repetidos, y no necesitarás validaciones extrañas.
Cita:
Con respecto a lo del codigo, esta diseñado para que, si uno esta tratando de ingresar un tag que ya existe en la base de datos en el campo Tag, este es ignorado y no lo ingresa. Solo ingresa los tags de la variable $tagsimple que no existan en la db. Puede ser que no este bien escrito, ese codigo lo logre con ayuda de otra persona en este foro que me dijo que se hacia de esa manera..
No sólo no está bien escrito. Ignora reglas básicas como que no puedes consultar e insertar en la tabla al mismo tiempo en la misma sentencia. MySQL no te lo permite.
Por otro lado, como ya te dije, hay formas mucho más simples para asegurar la unicidad de valores, y que no pasan por una consulta. Quien te pasó ese código no conoce mucho de bases de datos.

Sugerencias:
1) Modifica esa tabla y crea un índice UNIQUE sobre la columna "Tag".
2) Elimina toda esa sentencia basura y escribe el insert como:
Código MySQL:
Ver original
  1. INSERT IGNORE INTO Tags (Tag) ...
El IGNORE hará que las inserciones fallidas no generen notificaciones de error. Simplemente no realizará la inserción y devolverá cero como ID.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 30/12/2011 a las 05:40