¿Cómo puedo recorrer todas las filas que devuelve una consulta select?
Publicado por Antonio (8 intervenciones) el 09/06/2018 17:46:18
Quiero hacer un código que genere cuotas automáticas para los socios de mi base de datos para el mes y el año actual.
Primero tengo un select que identifica que socios no tienen creada la cuota para el mes y el año actual, y para esos ejecuto un insert que crea las cuotas.
El problema es que solo inserta la cuota para el ultimo socio de todos los que devuelve el select del principio, que son los que no tienen las cuotas creadas, valga la redundancia.
He probado con un foreach y no me funciona y no se si es que no lo estoy haciendo bien.
EL código aqui:
Primero tengo un select que identifica que socios no tienen creada la cuota para el mes y el año actual, y para esos ejecuto un insert que crea las cuotas.
El problema es que solo inserta la cuota para el ultimo socio de todos los que devuelve el select del principio, que son los que no tienen las cuotas creadas, valga la redundancia.
He probado con un foreach y no me funciona y no se si es que no lo estoy haciendo bien.
EL código aqui:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php
// Función que crea las cuotas automáticamente.
function cuotaAuto() {
require_once 'conexion.php';
$seleccionar = "SELECT Id FROM socios WHERE Id NOT IN(SELECT Id_Socio FROM cuotas WHERE Mes = ? AND Anno = ?)";
if ($seleccionar_stmt = mysqli_prepare($conexion, $seleccionar)) {
// Ligar parámetros para marcadores.
mysqli_stmt_bind_param($seleccionar_stmt, "ii", $mes, $anno);
//Establecer la información local en castellano de España
$inf_local = setlocale(LC_ALL,"es_ES");
//Variables que guardan el mes (numérico) y el año atual.
$mes = strftime("%B");
$anno = date("Y");
// Ejecutar la consulta preparada.
mysqli_stmt_execute($seleccionar_stmt);
// Vincular las variables de resultados.
$res = mysqli_stmt_bind_result($seleccionar_stmt, $Id);
// Obtener los valores.
while (mysqli_stmt_fetch($seleccionar_stmt)) {
echo $Id . "<br/>";
}
$numf = mysqli_stmt_num_rows($seleccionar_stmt);
if ($numf == 0) {
echo "0 filas";
} else {
echo "<p><b>Filas: </b>" . $numf . "</p>";
echo "<p>Se insertará la cuota del mes actual para todos los socios que no la tengan creada</p>";
$array = array();
foreach ($array as $Id) {
$insertar = "INSERT INTO cuotas VALUES(?, ?, ?, ?, ?, ?)";
if ($insertar_stmt = mysqli_prepare($conexion, $insertar)) {
// Ligar parámetros para marcadores.
mysqli_stmt_bind_param($insertar_stmt, "iisidi", $id_cuota, $id_socio, $mes, $anno, $importe, $pagado);
$id_cuota = NULL;
$id_socio = $Id;
//El importe actual es un valor temporal. El valor real debe ser el valor predeterminado de la tabla opciones.
$importe = 12.50;
$pagado = 0;
//Ejecutamos la consulta preparada.
mysqli_stmt_execute($insertar_stmt);
}
// Cerrar la sentencia preparada.
mysqli_stmt_close($insertar_stmt);
}
}
// Cerrar la sentencia preparada.
mysqli_stmt_close($seleccionar_stmt);
}
mysqli_close($conexion);
}
cuotaAuto();
?>
- cuotas_auto.zip(1,2 KB)
Valora esta pregunta


0