db.class.php
2.19 KB
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
<?php
/**********************************************************************************
Sistema e-SIC Livre: sistema de acesso a informação baseado na lei de acesso.
Copyright (C) 2014 Prefeitura Municipal do Natal
Este programa é software livre; você pode redistribuí-lo e/ou
modificá-lo sob os termos da Licença GPL2.
***********************************************************************************/
class DB {
private static $mysqli;
private static $rs; // Último resultado
private static $query; // Última query
private function __construct() {}
static function conn() {
if (!self::$mysqli) {
self::$mysqli = new mysqli('p:'.DBHOST, DBUSER, DBPASS, DBNAME);
}
if (mysqli_connect_errno()) {
printf("Conexão ao banco de dados falhou.");
error_log(mysqli_connect_error());
exit();
}
return self::$mysqli;
}
// Escapa os caracteres especiais, evitando injeção de SQL e HTML:
static function esc($param) {
return mysqli_real_escape_string(self::conn(), htmlentities($param));
}
static function execQuery($query, $style = MYSQLI_USE_RESULT) {
$rs = self::conn()->query($query, $style);
if ($rs === false) {
error_log(self::conn()->error);
error_log(self::conn()->stat());
error_log("Comando em execucao? Tentando liberar.");
error_log("Query anterior: ".self::$query);
error_log("Nova chamada:");
error_log(debug_backtrace()[0]['file']);
error_log(debug_backtrace()[0]['line']);
error_log($query);
try {
self::conn()->store_result();
self::$rs->free();
} catch(Exception $e) {
error_log("Falha ao liberar conexão ao banco de dados: ".$e);
};
$rs = self::conn()->query($query, $style);
if ($rs === false) {
error_log(self::conn()->error);
error_log(self::conn()->stat());
}
} else {
self::$rs = $rs;
self::$query = $query." (".debug_backtrace()[0]['file'].": ".debug_backtrace()[0]['line'].")";
}
return self::$rs;
}
static function rs_to_array($result, $numass=MYSQL_BOTH) {
$got = array();
if(mysqli_num_rows($result) == 0)
return $got;
mysqli_data_seek($result, 0);
while ($row = mysqli_fetch_array($result, $numass)) {
array_push($got, $row);
}
return $got;
}
}
?>