PHP - subconsulta preparada

 
Vista:
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

subconsulta preparada

Publicado por Alejandro (172 intervenciones) el 21/05/2020 13:57:44
Hola que tal,

vereis quiero hacer una subconsulta preparada pero no se si esta bien. Os dejo el codigo:

1
2
3
4
5
6
7
8
9
$SQL = "INSERT INTO tabla (columna1, columna2, columna3)
SELECT SUM(columnaOtraTabla) FROM otraTabla WHERE columna2OtraTabla=? AND columna3OtraTabla=? AS anual,
SELECT SUM(columnaOtraTabla) FROM otraTabla WHERE columna3OtraTabla=? AS plurianual";
$resultado = mysqli_prepare($GLOBALS['conn'],$SQL);
 
$ok = mysqli_stmt_bind_param($resultado,"si",$columna2OtraTabla, $columna3OtraTabla);
$ok = mysqli_stmt_execute($resultado);
 
echo "Agregados los datos </br>";

Saludos
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

subconsulta preparada

Publicado por Julio (830 intervenciones) el 22/05/2020 09:15:11
Hola.

Tienes tres signos de interrogación pero le pasas únicamente dos variables. Te dará error, imagino.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
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
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

subconsulta preparada

Publicado por Alejandro (172 intervenciones) el 22/05/2020 09:44:06
Pero es que hay dos condiciones que son la misma, entonces tendria que volver a poner otra variable aunque se repitan las condiciones???
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
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

subconsulta preparada

Publicado por Alejandro (172 intervenciones) el 22/05/2020 10:05:32
Me da el siguiente fallo:

Warning: mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, bool given
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
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

subconsulta preparada

Publicado por Alejandro (172 intervenciones) el 22/05/2020 10:31:50
en varias paginas me esta dando error el mysqli_prepare y no se cual es el fallo, puesto que no hay fallos en la conexion, sino me saltaria un error y la sentencia parece que esta bien no??
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

subconsulta preparada

Publicado por Julio (830 intervenciones) el 22/05/2020 10:43:03
Hay dos condiciones que son la misma, ¿pero él qué sabe de que son la misma? Quiero decir, ¿cómo sabe él que en un ? va la misma condición? ¿En qué posición va? Para él son 3 interrogantes y recibe 2 parámetros. ¿Que el primero y el tercero son idénticos? Sí, tú como humano lo ves, pero él no lo puede ver, sólo ve 3 interrogantes. Piensa más como máquina que como persona, jajaja.

Por otra parte: Warning: mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, bool given. Lee qué te indica el resultado, que te lo aclarará muchas veces. Te dice que mysqli_stmt_bind_param espera que el primer parámetro sea un mysqli_stmt, sin embargo recibe un valor booleano. El primer parámetro es $resultado, así que si esa variable es booleana es porque la consulta ha dado error (devuelve false si da error, o un objeto mysqli_stmt si todo ha ido bien). Así pues, te está diciendo que la consulta está mal.

Y, no sé yo, pero en la consulta pareces querer colocar tres elementos pero le indicas luego dos de ellos. Quizá está ahí el fallo de la consulta.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
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
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

subconsulta preparada

Publicado por Alejandro (172 intervenciones) el 22/05/2020 11:23:43
"Y, no sé yo, pero en la consulta pareces querer colocar tres elementos pero le indicas luego dos de ellos. Quizá está ahí el fallo de la consulta."

Te comento, lo que tengo son dos tablas, ambas asociadas a una tabla de personas mediante la fk.

En una registro becas de las personas registradas (id, nombre_beca, cuantia, año, fk) y en la otra registro el total de las becas (id, año, anual, plurianual, fk). Entonces necesito sumar la cuantia de la primera tabla y registrar en la segunda tabla las becas reicibidas en un año o todos los años.

Por eso he puesto esas condiciones, el registro "anual" tiene las condiciones año y fk asociado al id de la persona y el segundo solo con fk puesto que necesito saber la cuantia total de esa persona en todos los años
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

subconsulta preparada

Publicado por Julio (830 intervenciones) el 22/05/2020 11:29:14
Volvemos a no entendernos, jaja. Mira, tienes:

1
INSERT INTO tabla (columna1, columna2, columna3)

Y le pasas:

1
2
SELECT SUM(columnaOtraTabla) FROM otraTabla WHERE columna2OtraTabla=? AND columna3OtraTabla=? AS anual
SELECT SUM(columnaOtraTabla) FROM otraTabla WHERE columna3OtraTabla=? AS plurianual

¿Y el valor para la columna3?

Además, sería INSERT INTO tabla () VALUES (), por lo que te faltaría el VALUES y encerrar entre paréntesis los valores.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
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
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

subconsulta preparada

Publicado por Alejandro (172 intervenciones) el 22/05/2020 11:32:32
XD

Si es que en columna3 registro el foreign key que es el id de la persona.

Deberia de encerrar a los Select con un parentesis o cada uno con uno??
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
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

subconsulta preparada

Publicado por Alejandro (172 intervenciones) el 22/05/2020 11:45:30
Lo he dejado asi:

1
2
3
$SQL = "INSERT INTO tabla (columna1, columna2, columna3) VALUES
((SELECT SUM(columnaOtraTabla) FROM otraTabla WHERE columna2OtraTabla=? AND columna3OtraTabla=? AS anual),
(SELECT SUM(columnaOtraTabla) FROM otraTabla WHERE columna3OtraTabla=? AS plurianual"),'".$id."');
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
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

subconsulta preparada

Publicado por Alejandro (172 intervenciones) el 22/05/2020 12:16:33
Corrijo:

1
2
3
$SQL = "INSERT INTO tabla (columna1, columna2, columna3) VALUES
((SELECT SUM(columnaOtraTabla) FROM otraTabla WHERE columna2OtraTabla=? AND columna3OtraTabla=? AS anual),
(SELECT SUM(columnaOtraTabla) FROM otraTabla WHERE columna3OtraTabla=? AS plurianual"),?);
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

subconsulta preparada

Publicado por Julio (830 intervenciones) el 22/05/2020 12:21:47
Es comprobar que la consulta te funciona. A veces dan muchos problemas hasta que encuentras exactamente la que buscas (de todas formas, estás poniendo el ? fuera de la propia cadena, eso no creo que te vaya bien).

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
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
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

subconsulta preparada

Publicado por Alejandro (172 intervenciones) el 22/05/2020 15:50:06
una cosa como podria saber el fallo en mysqli_prepare()? porque me da false no solo en la anterior consulta sino en esta tambien:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$select = "SELECT campo1, campo2 FROM tabla WHERE fk=?";
$result = mysqli_prepare($GLOBALS['conn'],$select);
 
 
$ok =  mysqli_stmt_bind_param($result,"i", $id);
$ok = mysqli_stmt_execute($result);
 
if($ok2==false){
 
                echo "Error al ejecutar la consulta";
 
            }else{
 
                $ok = mysqli_stmt_bind_result($result, $campo1, $campo2);
 
                while($filas=mysqli_stmt_fetch($result)){
 
                                    echo "Variables a mostrar:".$campo1." ".$campo2.";
                }
mysqli_stmt_close($result);

He de decir que la anterior y esta estan tambien dentro de otro while de sentencias preparadas superiores.
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

subconsulta preparada

Publicado por Julio (830 intervenciones) el 22/05/2020 16:25:31
Mira a ver si te funciona:

1
$mysqli->error

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
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
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

subconsulta preparada

Publicado por Alejandro (172 intervenciones) el 25/05/2020 09:32:27
Salen estos errores


Notice: Undefined variable: mysqli

Notice: Trying to get property 'error' of non-object
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

subconsulta preparada

Publicado por Julio (830 intervenciones) el 25/05/2020 09:41:17
Bueno, es que $mysqli debería ser la variable en la que tienes la conexión a la base de datos, si no creo mal ahora. Error mío por no habértelo dicho.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
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
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

subconsulta preparada

Publicado por Alejandro (172 intervenciones) el 25/05/2020 10:02:19
Vale la conexion no me da ningun error y la consulta lo he probado en phpmyadmin directamente y funciona. No entiendo que puede estar pasando
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
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

subconsulta preparada

Publicado por Alejandro (172 intervenciones) el 25/05/2020 11:11:44
vale he averiguado el fallo, es este:

Commands out of sync; you can't run this command

He leido por foros que mysqli no puede hacer dos consulta simultaneas, pero la solucion no esta clara. Dicen de quitar el delimitador ; pero evidentemente php no lo da como valido
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