Clonar registros en mysql

julio 11, 2011

Si necesitas una función para clonar registros, aquí tienes unas. La idea es sencilla: usar SQL para clonar un registro. En esencia es algo así:


INSERT INTO tabla (SELECT * FROM tabla WHERE id=..)

El problema es que la SQL anterior no funciona si tienes un campo clave (99% de las tablas, o un campo único). Así que toca refinar mas la función.


function mysql_clonar_registro ( $tabla, $clave ) {

   // limpieza parámetros
   $tabla= mysql_real_escape_string($tabla);
   $clave= mysql_real_escape_string($clave);

   // obtener lista de campos, no únicos
   $rsCampos = mysql_query("SHOW COLUMNS FROM $tabla");
   $campos= array();
   $campoClave ="";
   while ( $campo = mysql_fetch_array($rsCampos) ){

       if ( $campo["Key"] == "PRI" ){
           $campoClave = $campo[0];
       }
       $campos[] =  $campo["Key"] == "PRI" || $campo["Key"] == "UNI" ? "NULL":    $campo[0];
   }
   mysql_free_result ( $rsCampos );

   // clonar el registro mediante una SQL
   if ( $campoClave && count($campos)>0 ) {
       $SQL = sprintf( "INSERT INTO $tabla ( SELECT %s FROM $tabla WHERE %s='%s' )",
           implode(",",$campos),
           $campoClave,
           $clave );
       mysql_query ($SQL);
       return mysql_affected_rows();
   }
   return false;
}

5 Responses to “Clonar registros en mysql”

  1. Marcos Says:

    Jo, parece interesante, a mi me gustaría tener esta función operativa en mi página.. pero no sé muy bien como aplicarla.. podrías poner comentarios de que hace cada paso, o este blog es para gente más profesional?

    Gracias por todo.


  2. Excelente función, justo lo que necesitaba. Gracias por tu aporte.

  3. Sergio Says:

    No funciona no marca error pero no duplica, manejo una clase donde tengo todas las funciones que uso en mis aplicaciones PHP pero no me duplica como deberia, solo hay que colocar entre comillas el nombre de la tabla y el campo que no debe duplicarse mysql_clonar_registro($tabla,$clave) en mi caso $duplica=$ConnectWithClass->mysql_clonar_registro(“proveedores”,”id”);

    • rg1024 Says:

      Si funciona. El campo “id” es la clave primaria del registro que hay duplicar. Por ejemplo:
      mysql_clonar_registro ( “foo”,3);

      La duplicación no funcionará si la tabla tiene un campo único, sin contar con la clave primaria.


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: