Foros del Web » Programando para Internet » PHP »

actualizar varios campos de una base de datos con php

Estas en el tema de actualizar varios campos de una base de datos con php en el foro de PHP en Foros del Web. Hola tengo un array php con los identificador de los campos que quiero actualizar pero no se muy bien como tendria que hacerlo yo probe ...
  #1 (permalink)  
Antiguo 20/11/2013, 03:30
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
actualizar varios campos de una base de datos con php

Hola tengo un array php con los identificador de los campos que quiero actualizar pero no se muy bien como tendria que hacerlo yo probe algo asin:

Código PHP:
Ver original
  1. $id=array(1,33,45,3,23,4,5);
  2.  
  3. for($i=0; $i<count($id);$i++){
  4.    $sql="update empresa set activo='on' where id=?";
  5.    $pdo=$db->prepare($sql);
  6.    $pdo->bindParam(1,$id[$i]);
  7.    $pdo->execute();
  8. }

No se si esta es la manera correcta de hacerlo, pero en el caso de que tenga 20 id en el array realizaria 20 consultas en la base de datos, no creo que sea la mejor manera de hacerlo, alguna ayuda?
saludos.
  #2 (permalink)  
Antiguo 20/11/2013, 03:47
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: actualizar varios campos de una base de datos con php

Código MySQL:
Ver original
  1. update empresa set activo='on' where id in (1,33,45,3,23,4,5);

En una sola consulta.... IN no es que sea muy eficiente, dependiendo de tus datos quizas es mas rapida la otra opción.... pero siendo un id sera rapido creo....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 20/11/2013, 03:55
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: actualizar varios campos de una base de datos con php

Hola quimfv, entonces la diferencia de estas dos formas que seria solo el tiempo que tarda en ejecutarte? no tiene nada que ver que de la primera forma realize 20 consultas y de la segunda solo 1?
haber si me podeis aclarar esto que era mi gran duda?

tambien me gustaria saber como validar que este array:
Código PHP:
Ver original
  1. $id=array(1,33,45,3,23,4,5);
solo contenga datos numericos?sin crear ningun bucle para validar uno a uno.
espero me puedan ayudar.
saludos
  #4 (permalink)  
Antiguo 20/11/2013, 04:07
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: actualizar varios campos de una base de datos con php

En principio es más rápido una consulta que varias pero la velocidad de las consulta no depende solo de su sintaxis tambien depende de los datos en si... en este caso diría que la opción del IN se puede tener en cuenta.

UPDATE es una consulta de escriptura luego solo te ahorras el tiempo de comunicación entre el servidor web (php) y el servidor de bbdd... las operaciones que hace mysql para resolver el update con el IN y los updates individuales son practicamente las mismas...

En cuanto a validar los datos del array tienes la función is_nan que te dirá si son números....
Código PHP:
Ver original
  1. $id=array(1,33,45,3,23,4,5);
  2.  
  3. $sql="update empresa set activo='on' where id IN (";
  4. $j=0;
  5. for($i=0; $i<count($id);$i++){
  6.     if(is_nan($id[$i])) {
  7.         if($j!=0) $sql.=",";
  8.         $sql.=$id[$i];
  9.         $j++;
  10.     }
  11. }
  12.    $sql.=")";
  13.    $pdo=$db->prepare($sql);
  14.    $pdo->execute();

Quizas deberías usar is_int para asegurar que sean enteros....

Por otro lado los updates individuales te permiten saber si ha tenido exito la query sobre un id concreto mientras que con el IN solo pudes llegar a saber el número de filas afectadas....que puede o no coincidir con el count del array....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 20/11/2013 a las 04:31
  #5 (permalink)  
Antiguo 20/11/2013, 04:35
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: actualizar varios campos de una base de datos con php

ok gracias por tu ayuda quimfv, me decidire por las consultas individuales entonces, y gracias por la ayuda para validar los valores de los array buscando por php encontre ctype_digit quizas use esa, mil gracias nuevamente por tu colaboracion, saludos.
  #6 (permalink)  
Antiguo 20/11/2013, 07:06
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: actualizar varios campos de una base de datos con php

Hola perdonar que este aqui otra vez pero ahora necesito saber como hacer esta consulta pero esta vez con un select donde me tiene que mostrar los registros con un id que esten en el array php.

Con el update no tengo problema porque me los va actualizando pero como lo muestro en pantalla con el select.
saludos.
  #7 (permalink)  
Antiguo 20/11/2013, 07:35
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: actualizar varios campos de una base de datos con php

Código MySQL:
Ver original
  1. SELECT * FROM empresa WHERE id IN (1,33,45,3,23,4,5);

No te ofendas pero te recomiendo esto http://dev.mysql.com/doc/refman/5.0/es/
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #8 (permalink)  
Antiguo 20/11/2013, 07:56
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: actualizar varios campos de una base de datos con php

Cita:
Iniciado por quimfv Ver Mensaje
Código MySQL:
Ver original
  1. SELECT * FROM empresa WHERE id IN (1,33,45,3,23,4,5);

No te ofendas pero te recomiendo esto http://dev.mysql.com/doc/refman/5.0/es/
para nada si no se le hace caso a los que saben vamos mal

igual ya opte por el in como unica solucion para una selecion.
gracias nuevamente y saludos.

Etiquetas: campos, sql
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 08:50.