Foros del Web » Programando para Internet » PHP »

Problema con array e insert

Estas en el tema de Problema con array e insert en el foro de PHP en Foros del Web. Bueno... quiero hacer un insert, con datos en un array y este es el código Código PHP: $arrayDatos  = array( "autor"  =>  $autor ,                               "titulo"  ...
  #1 (permalink)  
Antiguo 19/07/2006, 09:36
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 14 años
Puntos: 88
Problema con array e insert

Bueno... quiero hacer un insert, con datos en un array y este es el código

Código PHP:
$arrayDatos = array("autor" => $autor
                            
"titulo" => $titulo
                            
"noticia" => $noticia,
                            
"publi_date" => time());
            
while(list(
$campo$valor) = each($arrayDatos))    {
$query mysql_query("INSERT INTO news ($campo) VALUES ('$valor')") or die(mysql_error());

el asunto es que lo ingresa... pero por separado...

Son 4 datos, y los ingresa por separado...

Osea... me inserta el autor, luego el titulo, luego la noticia y finalmente la fecha, y quedan 4 noticias... una con el autor, otra con el título, etc...

Gracias :)
  #2 (permalink)  
Antiguo 19/07/2006, 09:41
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 12 años, 2 meses
Puntos: 18
Creo que la función implode te puede servir. Un saludo.
  #3 (permalink)  
Antiguo 19/07/2006, 09:42
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 14 años
Puntos: 88
Gracias voy a probar... :)
  #4 (permalink)  
Antiguo 19/07/2006, 09:45
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 14 años
Puntos: 88
lo dejé así...

Código PHP:
            while(list($campo$valor) = each($arrayDatos))    {
                
$campoComa implode(","$campo);
                
$valorComa implode(","$valor);
                
$query mysql_query("INSERT INTO news ($campoComa)
                                        VALUES ('$valorComa')"
) or die(mysql_error());
            } 
Y me da este error :/

"Column count doesn't match value count at row 1"

:(
  #5 (permalink)  
Antiguo 19/07/2006, 09:49
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 12 años, 2 meses
Puntos: 18
Cita:
Iniciado por spider_boy
lo dejé así...

Código PHP:
            while(list($campo$valor) = each($arrayDatos))    {
                
$campoComa implode(","$campo);
                
$valorComa implode(","$valor);
                
$query mysql_query("INSERT INTO news ('$campoComa')
                                        VALUES ('$valorComa')"
) or die(mysql_error());
            } 
Y me da este error :/

"Column count doesn't match value count at row 1"

:(
Creo que te dejaste las comillas de la variable $campoComa. Prueba a ver. Ese error de qué linea es? No lo dice?
  #6 (permalink)  
Antiguo 19/07/2006, 09:52
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 14 años
Puntos: 88
No especifica la linea... pero en el '$campoComa' si lo hace... y da este error (al ponerle las comillas)


"You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''') VALUES ('')' at line 1"

Gracias por tus respuestas :)
  #7 (permalink)  
Antiguo 19/07/2006, 09:54
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 12 años, 2 meses
Puntos: 18
Me equivoqué. Va sin comillas. (Las dos variables en el insert sin comillas)
Ah, y el bucle while ya no te hace falta.
  #8 (permalink)  
Antiguo 19/07/2006, 09:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 11 años, 6 meses
Puntos: 2122
Tu problema no es ese, es que estas dandole un mal uso a list()
tienes que hacer esto:
Código PHP:
$arrayDatos = array("autor" => $autor
                            
"titulo" => $titulo
                            
"noticia" => $noticia,
                            
"publi_date" => time());
$campos array_keys$arrayDatos );
$valores array_values$arrayDatos );
$camposString = array();
$valoresString = array();         
foreach( 
$campos as $campo ) {
      
$camposString[] = "`" $campo "`";
}
$camposString implode","$camposString );

foreach( 
$valores as $valor ) {
      
$valoresString[] = "'" addslashes$valor ) . "'";
}

$valoresString implode", "$valoresString );
$query mysql_query("INSERT INTO news ($camposString) VALUES (valoresString)") or die(mysql_error()); 
  #9 (permalink)  
Antiguo 19/07/2006, 09:57
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 12 años, 2 meses
Puntos: 18
Utiliza las funciones array_keys y array_values para extraer los arrays de las claves y los valores respectivamente.
  #10 (permalink)  
Antiguo 19/07/2006, 10:04
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 14 años
Puntos: 88
A ver... probé varias formas...

Esta me ingresa datos en blanco...
Código PHP:
            list($campo$valor) = $arrayDatos;
                
$campoComa implode(","$campo);
                
$valorComa implode(","$valor);
                
                
$query mysql_query("INSERT INTO news ($campoComa)
                                        VALUES ($valorComa)"
) or die(mysql_error()); 
Esta me da el error anterior
"Column count doesn't match value count at row 1"
Código PHP:
            list($campo$valor) = $arrayDatos;
                
$campoComa implode(","$campo);
                
$valorComa implode(","$valor);
                
                
$query mysql_query("INSERT INTO news ($campoComa)
                                        VALUES ('$valorComa')"
) or die(mysql_error()); 
Esta el mismo error de arriba
Código PHP:
            list($campo$valor) = $arrayDatos;
                
$campoComa implode(","$campo);
                
$valorComa implode(","$valor);
                
                
$query mysql_query("INSERT INTO news ($campo)
                                        VALUES ('$valor')"
) or die(mysql_error()); 
esta me ingresa datos en blanco...

Código PHP:
            list($campo$valor) = $arrayDatos;
                
$campoComa implode(","$campo);
                
$valorComa implode(","$valor);
                
                
$query mysql_query("INSERT INTO news ($campo)
                                        VALUES ($valor)"
) or die(mysql_error()); 
Nosé que hacer :(
  #11 (permalink)  
Antiguo 19/07/2006, 10:04
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 14 años
Puntos: 88
Perdón... no había leido los comentarios de array_keys y eso...
  #12 (permalink)  
Antiguo 19/07/2006, 10:13
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 14 años
Puntos: 88
Puse el código tal cual dijo Gator y la consulta la dejé así...

Código:
$query = mysql_query("INSERT INTO news ($campoString) VALUES ($valorString)") or die(mysql_error());
y ahora me sale esto :|

"Unknown column 'Probando...' in 'field list' "...

:(
  #13 (permalink)  
Antiguo 19/07/2006, 10:28
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 12 años, 2 meses
Puntos: 18
Yo lo pondría así:
Código PHP:
$arrayDatos = array("autor" => $autor
                            
"titulo" => $titulo
                            
"noticia" => $noticia,
                            
"publi_date" => time());
$campos array_keys$arrayDatos );
$valores array_values$arrayDatos );
      

$camposString implode","$campos );
$valoresString implode", "$valores );

$query mysql_query("INSERT INTO news ($camposString) VALUES (valoresString)") or die(mysql_error()); 
Aunque ese error, que es de SQL, te dice que hay una columna que no existe en la BD.
  #14 (permalink)  
Antiguo 19/07/2006, 10:34
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 14 años
Puntos: 88
Lo que pasa es que "Probando..." es el valor que quiero ingresar y lo toma como si fuera un campo de la tabla...

Probé como dijiste que pondrías...

Código PHP:
$campos array_keys($arrayDatos);
$valores array_values($arrayDatos);
        
$campoString implode(", "$campos);
$valorString implode(", "$valores);    

$query mysql_query("INSERT INTO news ($campoString) VALUES ($valorString)") or die(mysql_error()); 
y me da este error...

"You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '.., Probando..., Probando..., 1153323259)' at line 2"...

Debe ser una estupidez... siempre son tonteras las que me pasan... :(...

Gracias por sus respuestas de todos modos :)
  #15 (permalink)  
Antiguo 19/07/2006, 10:37
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 11 años, 6 meses
Puntos: 2122
Exacto te esta diciendo que en tu $arrayDatos agregaste un campo que no existe en la base de datos, y el metodo que yo te puse te agrega los values con slashes para prevenir cualquier inyeccion de datos.

Yo te diria que hicieras tu query asi:
Código PHP:
$theQuery "INSERT INTO news ($camposString) VALUES (valoresString)";
$query mysql_query($theQuery) or die(mysql_error() . " Query: " $theQuery); 
  #16 (permalink)  
Antiguo 19/07/2006, 10:49
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 14 años
Puntos: 88
Probé con esa consulta

Código PHP:
            $theQuery "INSERT INTO news ($campoString) VALUES ($valorString)";
            
$query mysql_query($theQuery) or die(mysql_error() . " Query: " $theQuery); 
y me da este error...

"Unknown column 'HOLA' in 'field list' Query: INSERT INTO news (`autor`,`titulo`,`noticia`,`publi_date`) VALUES (`HOLA`,`HOLA`,`HOLA`,`1153324040`)"

Conste que HOLA, es un valor que ingresé en un campo de texto... no un campo de la tabla....

Gracias :)
  #17 (permalink)  
Antiguo 19/07/2006, 11:04
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 14 años
Puntos: 88
Listo... esta era la solución...

Código PHP:
     while(list($campo$valor) = each($arrayDatos))    {
             
$campo2[]=$campo;
             
$valor2[]="'$valor'";
            }
$query mysql_query("INSERT INTO news (".implode(",",$campo2).")
                                      VALUES ("
.implode(",",$valor2).")") or die(mysql_error()); 
Muchas gracias a ambos, de verdad les agradezco la ayuda...
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 11:38.