PHP - Bucle foreach dentro de una sentencia sql

   
Vista:

Bucle foreach dentro de una sentencia sql

Publicado por sam (138 intervenciones) el 20/03/2015 13:51:34
Hola amigos/as, miren ya ni entiendo por que esta consulta sql no me funciona (lleva php).

Por mas que la reviso no se por que no funciona.

la consulta sql es un insert into, pero con un bucle foreach dentro y este bucle no funciona.

Es extraño por que lo veo bien escrito.

Si pudieran echarme una mano lo agradeceria mucho.


$array_datos = array('$nombre', '$caracteristicas', '$antiguedad');


$sql="INSERT INTO " . $nombre_tabla . " (nombre, caracteristicas, antiguedad) VALUES (";
foreach($array_datos as $datos) {
$datos . ", "; }
")";
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Bucle foreach dentro de una sentencia sql

Publicado por Alejandro (198 intervenciones) el 20/03/2015 17:54:51
Veo que recorres el array pero no haces nada con los datos
es decir, $sql vale "INSERT INTO nombre tabla (nombre, caracteristicas, antiguedad) VALUES ("
recorres el array pero no produces resultados (echo, if, asignar a variable...)

Esto hace lo que me parece es el resultado que buscas
1
2
$sql="INSERT INTO " . $nombre_tabla . " (nombre, caracteristicas, antiguedad) VALUES ";
$sql.="('".implode("','",$array_datos)."')";
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Bucle foreach dentro de una sentencia sql

Publicado por sam (138 intervenciones) el 20/03/2015 20:12:57
Hola alejandro, efectivamente tienes razon, casi a la par hemos dado los dos con la solucion ,

es asi como dices con implode.

Ahora donde tengo el problema es en la parte donde pone "nombre , caracteristicas, antiguedad"

es decir que quede en vez de asi:

$array_datos = array('$nombre', '$caracteristicas', '$antiguedad');

$sql="INSERT INTO " . $nombre_tabla . " (nombre, caracteristicas, antiguedad) VALUES "; $sql.="('".implode("','",$array_datos)."')";



quede finalmente asi;

$array_datos = array('$nombre', '$caracteristicas', '$antiguedad');

$sql="INSERT INTO " . $nombre_tabla . " (str_replace("$", "", $array_datos)) VALUES "; $sql.="('".implode("','",$array_datos)."')";


Pero para variar se me resiste, si me pudieras ayudar con ello te lo agradeceria mucho
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Bucle foreach dentro de una sentencia sql

Publicado por sam (138 intervenciones) el 20/03/2015 20:29:30
bueno la sentencia para que este bien escrita seria asi mejor:

'".str_replace("'$', ''", $array_datos)."'

pero sigue sin funcionar

:-(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro

Bucle foreach dentro de una sentencia sql

Publicado por Alejandro (198 intervenciones) el 20/03/2015 21:09:59
Parece que quieres quitarle el signo de $ a las variables, el error esta en que lo que haces es para el contenido de la variable
1
2
3
$nombre = "Pancho";
$caracteristicas = "Feo, Fuerte y Formal";
$antiguedad =  "10 Añios"

Esto:
1
$array_datos = array('$nombre', '$caracteristicas', '$antiguedad');
equivale a esto:
1
$array_datos = array('Pancho', 'Feo, Fuerte y Formal', '10 años');

1
str_replace('$','', $array_datos)
no hay $ en los datos del array

Si quieres obtener los nombres deberias de poner indices a tu array
1
2
3
4
5
$array_datos = array(nombre=>'$nombre', caracteristicas=>'$caracteristicas',antiguedad=> '$antiguedad');
 
foreach($array_datos as $k => $v){
     echo "El indice $k contiene $v </ br>";
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Bucle foreach dentro de una sentencia sql

Publicado por sam (138 intervenciones) el 21/03/2015 12:37:35
Alejandro eres una machine, efectivamente tienes razon. Es asi como dices.

Tengo un problema de ultima hora que se resiste a solucionarse, es de sintaxis , sobre lo que me has acosejado:



$array_datos = array('nombre'=>'$nombre', 'caracteristicas'=>'$caracteristicas','antiguedad'=> '$antiguedad');


$sql="INSERT INTO " . $nombre_tabla . " ('".foreach($array_datos as $k => $v){$k;}."') VALUES

('". implode(', ', $array_datos)."') ";


El error de sintaxis me dice que esta en la parte del foreach pero por mas que lo veo lo veo bien escrito.

No se por que no funciona.

¿?

La parte del implode funciona, pero la del foreach estoy seguro que son una comillas que sobran o faltan pero no logro ver donde es extrañisimo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Bucle foreach dentro de una sentencia sql

Publicado por sam (138 intervenciones) el 21/03/2015 16:15:37
Bueno despues de mucho darle al coco tengo ya esto, y sin fallos de sintaxis:

$array_datos = array('nombre'=>'$nombre', 'caracteristicas'=>'$caracteristicas','antiguedad'=> '$antiguedad');

$sql = "INSERT INTO " . $nombre_tabla . " (";
$sql .= implode(', ', array_keys($array_datos));
$sql .= ") VALUES('". implode("', '", $array_datos)."') ";


pero me tira este mensaje:

INSERT INTO coches (0, 1, 2) VALUES('mercedes', 'coche', '5')

y claro el 0,1,2 debe ser nombre, caracteristicas, antiguedad

estoy cerca , pero sigue resistiendose.....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro

Bucle foreach dentro de una sentencia sql

Publicado por Alejandro (198 intervenciones) el 21/03/2015 17:23:24
Probe copiando y pegando tu codigo y funciona correctamente solo que me muestra la variable en lugar de su contenido
INSERT INTO (nombre, caracteristicas, antiguedad) VALUES('$nombre', '$caracteristicas', '$antiguedad')
con quitar las tildes al array
$array_datos = array('nombre'=>$nombre, 'caracteristicas'=>$caracteristicas, 'antiguedad'=>$antiguedad);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Bucle foreach dentro de una sentencia sql

Publicado por sam (138 intervenciones) el 21/03/2015 17:52:00
Hola alejandro, he probado lo que me dices en un fichero php limpio, solo con esto que me comentas, y en efecto funciona,

pero en el contexto donde lo estoy aplicando da error y no se por que ¿?

Lo estoy aplicando a un metodo de una clase.

Mira esto es lo que tengo:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class OperacionesMysql
{
    public $nombre_tabla = 'coches';
 
 
    public $nombre='mercedes';
    public $caracteristicas='coche';
    public $antiguedad=7;
 
 
public $array_datos = array('nombre'=>'$nombre', 'caracteristicas'=>'$caracteristicas', 'antiguedad'=>'$antiguedad');
 
 
    function InsertarDatos($nombre_tabla, $array_datos)
 
    {
        $sql = "INSERT INTO " . $nombre_tabla . " (";
        $sql .= implode(', ', array_keys($array_datos));
        $sql .= ") VALUES('". implode("', '", $array_datos)."') ";
 
        echo $sql;
    }
 
}

y he probado a quitarle las comillas en la clase de este ejemplo que te pongo y sigue sin funcionar.

:-(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Bucle foreach dentro de una sentencia sql

Publicado por sam (138 intervenciones) el 21/03/2015 18:44:39
se me olvido decir el error que me da , es este:

INSERT INTO cubos (0, 1, 2) VALUES('mercedes', 'coche', '5')

cuando debe ser:


INSERT INTO cubos (nombre, caracteristicas, antiguedad) VALUES('mercedes', 'coche', '5')
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Bucle foreach dentro de una sentencia sql

Publicado por sam (138 intervenciones) el 21/03/2015 19:39:01
Juan palomo yo me lo guiso , yo me lo como,

el error viene debido a que los datos provinientes desde otro archivo donde hay un formulario, se meten en un array , si,

pero no les habia puesto indice a cada valor del array.

Ahora funciona todo como un reloj suizo.

alejandro muchisimas gracias por tanta ayuda, de la cual he aprendido mucho.

un cordial saludo a ti y a la comunidad.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar