/
DB_intelligent.php
94 lines (76 loc) · 2.99 KB
/
DB_intelligent.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
<?php
class DB
{
private static $joiners = array(
',' => ',',
'&' => ' AND ',
'|' => ' OR ',
);
private static $instance = null;
final private function __construct() {}
final private function __clone() {}
public static function instance() {
if (self::$instance === null) {
try {
self::$instance = new PDO(
'mysql:host='.DB_HOST.';dbname='.DB_NAME,
DB_USER,
DB_PASS
);
self::$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
die('Database connection could not be established.');
}
}
return self::$instance;
}
public static function q($query) {
if (func_num_args() == 1) {
return self::instance()->query($query);
}
$args = func_get_args();
return self::instance()->query(self::autoQuote(array_shift($args), $args));
}
public static function x($query) {
if (func_num_args() == 1) {
return self::instance()->exec($query);
}
$args = func_get_args();
return self::instance()->exec(self::autoQuote(array_shift($args), $args));
}
public static function autoQuote($query, array $args) {
$i = strlen($query);
$c = count($args);
if (substr_count($query, '?') != $c) {
throw new UnexpectedValueException('Wrong parameter count: Number of placeholders and parameters does not match');
}
while ($c--) {
while ($i-- && $query[$i] != '?');
if (isset($query[$i+1]) && isset(self::$joiners[$query[$i+1]])) {
foreach ($args[$c] as $key => &$value) {
$value = '`' . $key . '`=' . self::instance()->quote($value);
}
$query = substr_replace($query, implode(self::$joiners[$query[$i+1]], $args[$c]), $i, 2);
continue;
}
if (null === $args[$c]) {
$replace = 'NULL';
}
elseif (is_array($args[$c])) {
foreach ($args[$c] as &$value) {
$value = self::instance()->quote($value);
}
$replace = '(' . implode(',', $args[$c]) . ')';
}
else {
$replace = self::instance()->quote($args[$c]);
}
$query = substr_replace($query, $replace, $i, 1);
}
return $query;
}
public static function __callStatic($method, $args) {
return call_user_func_array(array(self::instance(), $method), $args);
}
}