5 private $error_log = false;
6 private $error_mail = false;
7 private $lastInsertTable = null;
9 public function __construct($driver, $host, $dbname, $user, $passwd)
11 $this->db = new PDO(sprintf('%s:host=%s;dbname=%s', $driver, $host, $dbname), $user, $passwd);
13 # $this->db->query("SET NAMES 'utf8'");
14 # $this->db->query("SET CHARACTER SET 'utf8'");
15 # $this->db->query("SET collation_connection = 'utf8_general_ci'");
16 # $this->db->query("SET lc_time_names = 'de_DE'");
19 public function enableErrorLog()
21 $this->error_log = true;
24 public function disableErrorLog()
26 $this->error_log = false;
29 public function setErrorMail($address)
31 $this->error_mail = $address;
34 private function logQuery($sql)
36 if ($this->error_log) error_log(trim(str_replace("\n", ' ', $sql)));
39 private function handleError($sth, $sql)
41 if (!$this->error_log) error_log(trim(str_replace("\n", ' ', $sql)));
42 $arr = $this->db->errorInfo();
43 foreach (explode("\n", $arr[2]) as $line)
46 if ($this->error_mail && defined('MAIL_FROM') && defined('MAIL_FROM_NAME')) {
48 $mail->env_from(MAIL_FROM);
49 $mail->set('From', mb_encode_mimeheader(utf8_decode(sprintf("%s <%s>", MAIL_FROM_NAME, MAIL_FROM)),'latin1'));
50 $mail->set('To', $this->error_mail);
51 $mail->set('Subject', 'SQL Error in ' . $_SERVER['REQUEST_URI']);
53 $body = sprintf("http://%s%s%s\nReferer: %s\nUser: %s\n\n%s\n\nError Number %d\n%s\n\n",
54 $_SERVER['SERVER_NAME'],
55 $_SERVER['SERVER_PORT'] != 80 ? ':'.$_SERVER['SERVER_PORT'] : '',
56 $_SERVER['REQUEST_URI'],
57 $_SERVER['HTTP_REFERER'],
58 $_SESSION['sys']['login'],
64 debug_print_backtrace();
65 $body .= ob_get_contents()."\n";
68 if (count($_POST)) $body .= 'POST: ' . var_export($_POST,true)."\n";
69 if (count($_GET)) $body .= 'GET: ' . var_export($_GET,true)."\n";
70 if (count($_SESSION)) $body .= 'SESSION: ' . var_export($_SESSION,true)."\n";
77 public function errorInfo()
79 return $this->db->errorInfo();
82 public function quote($string)
84 if (is_null($string)) return 'NULL';
85 if (strtolower($string) == 'now()' || strtolower($string) == 'current_timestamp') return 'now()';
86 return $this->db->quote($string);
89 public function lastInsertId()
91 if (DBDRIVER == 'pgsql')
92 return $this->db->lastInsertId($this->lastInsertTable.'_id_seq');
94 return $this->db->lastInsertId();
97 private function query($sql)
99 $this->logQuery($sql);
100 $sth = $this->db->query($sql);
102 if ($sth === false) return $this->handleError($sth,$sql);
104 if (preg_match('/INSERT\s+INTO\s+(\S+)\s+/i', $sql, $matches))
105 $this->lastInsertTable = $matches[1];
110 public function execute($sql)
112 return $this->query($sql) !== false;
115 public function fetchValue($sql)
117 $sth = $this->query($sql);
118 if ($sth === false) return false;
119 $ret = $sth->fetch(PDO::FETCH_BOTH);
120 if ($ret === false) return false;
124 public function fetchAssoc($sql)
126 $sth = $this->query($sql);
127 if ($sth === false) return false;
128 return $sth->fetch(PDO::FETCH_ASSOC);
131 public function fetchObject($sql)
133 $sth = $this->query($sql);
134 if ($sth === false) return false;
135 return $sth->fetchObject();
138 public function fetchAssocList($sql)
141 $sth = $this->query($sql);
142 if ($sth === false) return $result;
143 while ($row = $sth->fetch(PDO::FETCH_ASSOC))
148 public function fetchObjectList($sql)
151 $sth = $this->query($sql);
152 if ($sth === false) return $result;
153 while ($row = $sth->fetchObject())
158 private function executeBind($sql, $data)
160 $sth = $this->db->prepare($sql);
161 if ($sth === false) return $this->handleError($sth,$sql);
163 foreach ($data as $k => $v)
164 $sth->bindValue(':'.$k, $v); // , PDO::PARAM_STR);
166 $ok = $this->db->execute();
167 if ($ok === false) return $this->handleError($sth,$sql);
169 if (preg_match('/INSERT\s+INTO\s+(\S+)\s+/i', $sql, $matches))
170 $this->lastInsertTable = $matches[1];
175 public function insertInto($table, $data)
177 if (!is_array($data)) throw Exception('insertInto called without data array');
180 foreach ($data as $k => $v) {
182 $values[] = ':' . $k;
185 $sql = sprintf("INSERT INTO %s (%s)\n VALUES (%s)",
187 implode(',', $columns),
188 implode(',', $values));
189 return $this->executeBind($sql, $data);
192 $db = new PDO('sqlsrv:server=SQLSERVERNAME;Database=own_exchange', 'user', 'password');
193 $sql = "INSERT INTO dbo.files(file_name, file_source) VALUES(:file_name, :file_source)";
194 $stmt = $db->prepare($sql);
195 $stmt->bindParam(":file_name", $files->name, PDO::PARAM_STR);
196 $stmt->bindParam(":file_source", file_get_contents($files->tempName), PDO::PARAM_LOB, 0, PDO::SQLSRV_ENCODING_BINARY);
200 $stmt = $dbh->prepare("INSERT INTO tExample (id,value) VALUES (:id,:value)");
205 PDOBindArray($stmt,$taValues);