Foros del Web » Programando para Internet » PHP »

Como asegurarme de que todos los textos de un campo sean distintos?

Estas en el tema de Como asegurarme de que todos los textos de un campo sean distintos? en el foro de PHP en Foros del Web. Hola. Si yo quiero que un campo de texto en una tabla sea distinto para cada registro, lo lógico sería hacer que el php que ...
  #1 (permalink)  
Antiguo 19/07/2004, 23:15
 
Fecha de Ingreso: mayo-2004
Mensajes: 27
Antigüedad: 13 años, 7 meses
Puntos: 0
Como asegurarme de que todos los textos de un campo sean distintos?

Hola. Si yo quiero que un campo de texto en una tabla sea distinto para cada registro, lo lógico sería hacer que el php que inserta el nuevo registro primero revise los otros para ver si el texto que se quiere insertar ya existe. Pero no estoy seguro de si un mismo archivo php, o tal vez dos distintos pero que hagan lo mismo (insertar un registro como ya dije) puedan ejecutarse al mismo tiempo. En este caso, podría pasar (aunque sé que es muy improbable) que si para dos usuarios distintos se quiere insertar el mismo texto casi al mismo tiempo, y ese texto todavía no existe, cuando el php se esté ejecutando para el usuario A, ejecute la función que revisa si el texto ya existe, y luego de devolver como respuesta que no existe, se detenga un momento para ejecutar el php para el usuario B, que también creerá que no existe (por que para ninguno de los dos usuarios de ha llamado todavía a la función que inserta los registros) y finalmente se inserte dos veces el mismo texto. Que desastre! . Si es posible que un php, o dos php de mi sitio web se ejecuten al mismo tiempo para usuarios distintos (como por ejemplo sucede con los ejecutables en Windows gracias a los threads o hilos) ¿Hay alguna forma de asegurarme de que no pase lo que digo arriba?
  #2 (permalink)  
Antiguo 20/07/2004, 02:51
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 13 años, 6 meses
Puntos: 2
Por qué no haces que ese campo sea "unique key" ?. Si lo que quieres es que se muestre un mensaje de error cuando el usuario repita una cadena que ya existe lo único que tienes que controlar es el error que te devuelva mysql cuando haga la inserción del registro con la sentencia if(mysql_errno()==1062) . 1062 es el código que te devuelve cuando intentas insertar un valor que ya existe y el campo es primary key o unique key.
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #3 (permalink)  
Antiguo 20/07/2004, 08:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si vas a controlar el código de error que devuelve Mysql ante un evento como el de intentar duplicar una llave (un campo de con propieda "unique": unico) .. vendría bien usar la "@" delante de la función mysql_query() que vas a usar .. por qué sino, igual PHP va a generar un error por qué no se pudo ejecutar la función en cuestión:

Código PHP:
@mysql_query("INSERT .....");
if (
mysql_errno()==1062){
  
// Das tu error personalizado ...

A mi personalmente no me gusta "probocar" errores y ver su código . .prefiero la técnica de hacer un "SELECT" para contar el nº de registros que obtengo .. si hay 1 ya sé que existe mi registro (uso COUNT() para agilizar un poco más este tipo de consultas). No obstante uso igualmente "unique key" por si la BD es accedida por otro médio (ejemplo: directamente por un GUI para Mysql .. phpMyadmin o similares ..).

Dependiendo del nivel y registros de errores que se hagan (tanto de PHP como de Mysql) .. esos errores por "duplicados" seguirian igualmente aunmentando los "log's" de errores. Si hacemos la consulta SQL antes .. evitamos esto a consta de algo más de consumo de recursos del servidor (en cuanto a proceso) para averigüar dicho dato si ya existe (pero como comento .. con COUNT() se optimiza mucho este proceso a nivel de recursos consumidos).

Un saludo,

Última edición por Cluster; 20/07/2004 a las 11:33
  #4 (permalink)  
Antiguo 20/07/2004, 11:03
 
Fecha de Ingreso: mayo-2004
Mensajes: 27
Antigüedad: 13 años, 7 meses
Puntos: 0
¿Pará que le pones @ antes de mysql_query?
  #5 (permalink)  
Antiguo 20/07/2004, 11:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
vendría bien usar la "@" delante de la función mysql_query() que vas a usar .. por qué sino, igual PHP va a generar un error por qué no se pudo ejecutar la función en cuestión:
Por qué PHP va a probocar ahí un error (WARNING .. o similar) ante esa situación y con la @ .. lo "silenciamos" por qué vamos a controlar ese error obteniendo el valor que va a dar mysql_error() .. que por cierto ahora que caigo sería: msyql_errno() .. por qué mysql_error() devuelve la "frase" del error .. y el errno el "nº" del código de error.

Un saludo,
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 21:14.