forked from GrumpyCrouton/GrumpyPDO
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgrumpypdo.php
More file actions
62 lines (55 loc) · 1.62 KB
/
grumpypdo.php
File metadata and controls
62 lines (55 loc) · 1.62 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
<?php
class GrumpyPdo extends \PDO
{
/**
* @var bool
*/
private $killOnError = false; //if true causes loss of stacktrace but will stop page load. Will still log error code.
private $echoOnError = false; //if true displays error message to user loading page
/**
* @var array
*/
private $opt = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE =>
PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false
);
/**
* @var string
*/
private $charset = "utf8";
public function __construct($host, $user, $pass, $db, $opt = array())
{
$charset = empty($opt['charset']) ? $this->charset : $opt['charset'];
$options = empty($opt['options']) ? $this->opt : $opt['options'];
parent::__construct($this->getDSN($host, $db, $charset), $user, $pass, $options);
}
public function run($query, $values = array())
{
try {
if (!empty($values)) {
$stmt = $this->prepare($query);
$stmt->execute($values);
} else {
$stmt = $this->query($query);
}
}
catch (PDOException $e) {
$this->handleError($e->getMessage());
throw $e;
}
return $stmt;
}
private function getDSN($host, $db, $charset)
{
return "mysql:host={$host};dbname={$db};charset={$charset}";
}
private function handleError($error)
{
error_log($error);
if ($this->echoOnError)
echo $error;
if ($this->killOnError)
die();
}
}