Foros del Web » Programando para Internet » PHP »

Optimizar función

Estas en el tema de Optimizar función en el foro de PHP en Foros del Web. Que tal, he hecho una función en PHP para insertar registros con un número de argumentos indefinidos. Me gustaría que algún maestro me diga si ...
  #1 (permalink)  
Antiguo 30/07/2009, 09:49
 
Fecha de Ingreso: julio-2009
Mensajes: 8
Antigüedad: 14 años, 9 meses
Puntos: 0
Pregunta Optimizar función

Que tal, he hecho una función en PHP para insertar registros con un número de argumentos indefinidos. Me gustaría que algún maestro me diga si es posible optimizarla (seguro que si) y me explique como, si es posible. Aquí el código:

Código PHP:
function insertarRegistro(){
    
    
// Primer argumento es la tabla
    
$tabla func_get_arg(0);
    
// Seguno argumento son los campos
    
$campos func_get_arg(1);
    
    
// El resto son los datos a insertar
    
for ($i 2$i func_num_args(); $i++){
        
        
// Que al final no agregue la coma para que no de error de sintaxis MySQL
        
if($i+func_num_args()){ $coma ","; }else{ $coma ""; }
        
      
$datos $datos."'".func_get_arg($i)."'$coma";
    }
    
    
// Inserto registro
    
print $sql "INSERT INTO $tabla ($campos) VALUES ($datos)"
}

insertarRegistro("datos_catalogo","nombre,codigo,catid,foto,descripcion,archivo,destacado,publicar",$nombre,$codigo,$catid,$foto,$descripcion,$archivo,$destacado,$publico); 
  #2 (permalink)  
Antiguo 30/07/2009, 10:26
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Optimizar función

este otro ejemplo seria mas "óptimo"
Código PHP:
function insertar($tabla$campos = array())
{
  
$sql 'INSERT INTO';

  
$vals $cols = array();
  foreach (
$campos as $key => $value)
  {
    
$value is_numeric($value)? $value
               
"'" addslashes(htmlspecialchars($value)) . "'";

    
$vals []= $value;
    
$cols []= $key;
  }

  
$cols join(', '$cols);
  
$vals join(",\n"$vals);

  
$sql .= "\n$tabla($cols)\n";
  
$sql .= "VALUES($vals)";
  return 
$sql;
}

$sql insertar("datos_catalogo", array(
  
"nombre" => $nombre,
  
"codigo" => $codigo,
  
"catid" => $catid,
  
"foto" => $foto,
  
"nombre" => $nombre,
  
"codigo" => $codigo,
  
"catid" => $catid,
  
"foto" => $foto,
  
"descripcion" => $descripcion,
  
"archivo" => $archivo,
  
"destacado" => $destacado,
  
"publico" => $publico
));

echo 
$sql
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 30/07/2009, 10:32
 
Fecha de Ingreso: enero-2009
Mensajes: 408
Antigüedad: 15 años, 3 meses
Puntos: 14
Respuesta: Optimizar función

Hola , yo te presento otra solución que a mi parecer es mas viable y menos php dependiente jaja.

Código php:
Ver original
  1. <?php
  2.  
  3. /**
  4.  * Script Author: Jonatan Lucio Casagrande <[email protected]>
  5.  * Script Function:
  6.  * Script Info: -
  7.  */
  8.  
  9. function insertaSQL($tabla,$parametros){
  10.  
  11. if(isset($tabla) && is_array($parametros) && (count($parametros)>=0)){
  12.  
  13. $campos='';
  14.  
  15. $valores='';
  16.  
  17. foreach($parametros as $campo=>$valor){
  18.  
  19. $campos.="{$campo},";
  20.  
  21. $valores.="'{$valor}',";
  22.  
  23. }
  24.  
  25. $campos=substr($campos,0,strlen($campos)-1);
  26.  
  27. $valores=substr($valores,0,strlen($valores)-1);
  28.  
  29. $sql="INSERT INTO {$tabla} ({$campos}) VALUES({$valores})";
  30.  
  31. echo $sql;
  32.  
  33. unset($campos,$valores,$tabla,$parametros);
  34.  
  35. }
  36.  
  37. }
  38.  
  39. //-- Invocación
  40.  
  41. $parametros=array("id"=>"12","nombre"=>"elias");
  42. insertaSQL('usuarios',$parametros);
  43.  
  44. ?>

Saludos!
  #4 (permalink)  
Antiguo 30/07/2009, 10:34
 
Fecha de Ingreso: julio-2009
Mensajes: 72
Antigüedad: 14 años, 9 meses
Puntos: 16
Respuesta: Optimizar función

bueno jugando un poco se me ocurrio esto ..

Código:
function insertarRegistro($tabla, $campo_valor){
    
	foreach ($campo_valor as $key => $value){
		$campos .= ','.$key;
		$datos .= ",'".$value . "'";
	}
	$campos = substr($campos, 1, strlen($campos));//remueve primer caracter -> la coma
	$datos = substr($datos, 1, strlen($datos));//remueve primer caracter -> la coma
    // Inserto registro
    print $sql = "INSERT INTO $tabla ($campos) VALUES ($datos)"; 
}
$campo_valor['nombre'] = 'juan';
$campo_valor['apellido'] = 'perez'; // osea seria $campo_valor['nombredelcampo'] = 'valor';
insertarRegistro('nombre_tabla',$campo_valor);
pero bueno tambien seguramente se puede optimizar
  #5 (permalink)  
Antiguo 30/07/2009, 10:39
 
Fecha de Ingreso: agosto-2006
Mensajes: 179
Antigüedad: 17 años, 8 meses
Puntos: 0
De acuerdo Respuesta: Optimizar función

Una variacion de tu funcion:

Código PHP:

function insertarRegistro(){
    
// Primer argumento es la tabla
    
$tabla func_get_arg(0);
    
// Seguno argumento son los campos
    
$campos func_get_arg(1);
    
    
// El resto son los datos a insertar
    
for ($i 2$i func_num_args(); $i++){        
      
$datos $datos."'".func_get_arg($i)."'";
    }
    
$datos=substr($datos,0,strlen($datos)-1); //Quitar coma al final
     // Inserto registro
    
print $sql "INSERT INTO $tabla ($campos) VALUES ($datos)"
}
insertarRegistro("datos_catalogo","nombre,codigo,catid,foto,descripcion,archivo,destacado,publicar",$nombre,$codigo,$catid,$foto,$descripcion,$archivo,$destacado,$publico); 
Solo elimino el if interno en el for, para acelerar un poco la construccion de la variable $datos, y al salir del for le quito la ultima coma.

Espero sea de tu utilidad.
  #6 (permalink)  
Antiguo 30/07/2009, 10:49
 
Fecha de Ingreso: julio-2009
Mensajes: 8
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Optimizar función

Excelente, gracias a todos!
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 22:43.