-
Notifications
You must be signed in to change notification settings - Fork 0
/
dbpdo.class.php
110 lines (99 loc) · 2.32 KB
/
dbpdo.class.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
<?php
require_once("base.class.php");
class dbpdo extends base
{
public $mh = NULL;
public $ps = array(); // prepared statements
function __autoload($class)
{
require_once("$class.class.php");
}
function __construct($config)
{
parent::__construct($config);
$this->config = $config;
$this->connect();
}
function connect()
{
try
{
$this->mh = new PDO(
config::db . ':host=' . $this->config->host() . ';dbname=' . $this->config->db(),
$this->config->user(),
$this->config->pass(),
array(PDO::ATTR_PERSISTENT => true)
);
}
catch (PDOException $e)
{
$this->error($e->getMessage());
}
}
function get_prepared_statement($q)
{
$hash = md5($q);
if(!in_array($hash, $this->ps))
$this->ps[$hash] = $this->mh->prepare($q);
return $this->ps[$hash];
}
function exec_statement($statement, $values, $inserting = false)
{
try
{
$this->mh->beginTransaction();
if(@$statement->execute($values))
{
if($inserting)
{
$last_insert_id = $this->mh->lastInsertId();
$this->mh->commit();
return $last_insert_id;
}
else
{
$this->mh->commit();
return $statement->fetchAll();
}
}
else
{
$error_info = $statement->errorInfo();
throw new Exception ("(Error " . $statement->errorCode() . ") SQLSTATE error code " . $error_info[0] . ", driver error code " . $error_info[1] . ": " . $error_info[2]);
}
}
catch (PDOException $e)
{
$this->mh->rollBack();
$this->error($e->getMessage());
}
catch (Exception $e)
{
$this->mh->rollBack();
$this->error($e->getMessage());
}
}
function query($q, $values, $memcache_key = NULL, $memcache_expiration = 3600, $memcache_flags = 0)
{
$statement = $this->get_prepared_statement($q);
if(preg_match('/^\s*INSERT/i', $q))
$result = $this->exec_statement($statement, $values, true);
else
{
if(config::use_memcache && $memcache_key !== NULL)
{
if(!($result = $this->memcache_get($memcache_key)))
{
$result = $this->exec_statement($statement, $values);
$this->memcache_set($memcache_key, $result, $memcache_expiration, $memcache_flags);
}
}
else
{
$result = $this->exec_statement($statement, $values);
}
}
return $result;
}
}
?>