-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathf_checkDB.php
140 lines (125 loc) · 4.78 KB
/
f_checkDB.php
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<?php
function checkOrResetMatrix($con, $x, $y){
$m = $x; // file
$n = $y; // posti
$totPosti = $m*$n;
transaction($con, $m, $n, $totPosti);
}
function transaction($con, $m, $n, $totPosti){
try {
mysqli_autocommit($con, false);
// controllo parametri
$query1 = "SELECT * FROM parametri FOR UPDATE";
$query11 = "SELECT * FROM prenotazioni FOR UPDATE";
if ( !($result1 = mysqli_query($con,$query1)) ) {
throw new Exception("Error in select 'parametri' for update query.");
}
if ( !($result11=mysqli_query($con, $query11)) ){
throw new Exception("Error in select 'prenotazioni' for update query.");
}
// CASO A) se ci sono già dei parametri ...
if (($rows=mysqli_num_rows($result1))==1){
$infos = mysqli_fetch_assoc($result1);
// ma se i paramteri sono cambiati, resetto nel DB
if ($infos['file']!=$m || $infos['colonne']!=$n){
// 1- elimino gli elementi nelle prenotazioni
$query2 = "DELETE FROM prenotazioni";
// 2 - elimino i vecchi parametri
$query3 = "DELETE FROM parametri";
// 3- scrivo i nuovi parametri
$query4 = "INSERT INTO parametri(file, colonne, totPosti) VALUES (?, ?, ?)";
if ( !($result2 = mysqli_query($con, $query2)) ){
throw new Exception("Deleting table 'prenotazione' failed.");
}
if ( !($result3 = mysqli_query($con, $query3)) ){
throw new Exception("Deleting table 'parametri' failed.");
}
if ( !($stmt = mysqli_prepare($con, $query4))){
throw new Exception("Insert of new parameters failed.");
}
mysqli_stmt_bind_param($stmt, "iii", $m, $n, $totPosti);
if ( !mysqli_execute($stmt) ) {
throw new Exception("Stmt error: ".mysqli_stmt_error($stmt) );
}
mysqli_stmt_close($stmt);
if (!mysqli_commit($con)) { // per avere il corretto messaggio di errore
throw new Exception("Commit failure");
}
} else if ($infos['file']==$m && $infos['colonne']==$n){
$totPosti = $infos['totPosti'];
}
// CASO B) non ci sono ancora parametri
} else if (($rows=mysqli_num_rows($result1))==0){
// 3- scrivo i nuovi parametri
$query4 = "INSERT INTO parametri(file, colonne, totPosti) VALUES (?, ?, ?)";
if ( !($stmt = mysqli_prepare($con, $query4))){
throw new Exception("Insert of first parameters failed.");
}
mysqli_stmt_bind_param($stmt, "iii", $m, $n, $totPosti);
if ( !mysqli_execute($stmt) ) {
throw new Exception("Stmt error: ".mysqli_stmt_error($stmt) );
}
mysqli_stmt_close($stmt);
}
} catch(Exception $e) {
mysqli_rollback($con);
echo "Rollback " . $e->getMessage();
mysqli_autocommit($con,true);
}
// pulizia tabella prenotazioni andata a buon fine
// pulizia tabella parametri andata a buon fine
// inserimento nuovi parametri andato a buon fine
}
// ----------------------------------------------------------------------------------------------
function getTotal($con){
$total = 0;
$query= "SELECT totPosti FROM parametri";
$result = mysqli_query($con, $query);
if (!$result){
die('Errore di query: '.mysqli_error($con));
} else {
$rows = mysqli_num_rows($result);
if ($rows!=1){
die('Errore parametri in db.');
}else{
$infos = mysqli_fetch_assoc($result);
$total = $infos['totPosti'];
}
}
return $total;
}
function getPrenotati($con){
$totPrenotati = 0;
$query= "SELECT count(*) as totPrenotati FROM prenotazioni WHERE stato = 'occupied'";
$result = mysqli_query($con, $query);
if (!$result){
die('Errore di query: '.mysqli_error($con));
} else {
$rows = mysqli_num_rows($result);
if ($rows!=1){
die('Errore parametri in db.');
}else{
$infos = mysqli_fetch_assoc($result);
$totPrenotati = $infos['totPrenotati'];
}
}
return $totPrenotati;
}
function getOccupati($con){
$totOccupati=0;
$query= "SELECT count(*) as totOccupati FROM prenotazioni WHERE stato = 'booked'";
$result = mysqli_query($con, $query);
if (!$result){
die('Errore di query: '.mysqli_error($con));
} else {
$rows = mysqli_num_rows($result);
if ($rows!=1){
die('Errore parametri in db.');
}else{
$infos = mysqli_fetch_assoc($result);
$totOccupati = $infos['totOccupati'];
}
}
return $totOccupati;
}
?>