-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcheckDB.php
83 lines (73 loc) · 3.17 KB
/
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
<?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
}
?>