TYPO3 CMS  TYPO3_6-2
adodb-pear.inc.php
Go to the documentation of this file.
1 <?php
16  /*
17  We support:
18 
19  DB_Common
20  ---------
21  query - returns PEAR_Error on error
22  limitQuery - return PEAR_Error on error
23  prepare - does not return PEAR_Error on error
24  execute - does not return PEAR_Error on error
25  setFetchMode - supports ASSOC and ORDERED
26  errorNative
27  quote
28  nextID
29  disconnect
30 
31  getOne
32  getAssoc
33  getRow
34  getCol
35  getAll
36 
37  DB_Result
38  ---------
39  numRows - returns -1 if not supported
40  numCols
41  fetchInto - does not support passing of fetchmode
42  fetchRows - does not support passing of fetchmode
43  free
44  */
45 
46 define('ADODB_PEAR',dirname(__FILE__));
47 include_once "PEAR.php";
48 include_once ADODB_PEAR."/adodb-errorpear.inc.php";
49 include_once ADODB_PEAR."/adodb.inc.php";
50 
51 if (!defined('DB_OK')) {
52 define("DB_OK", 1);
53 define("DB_ERROR",-1);
54 
55 // autoExecute constants
56 define('DB_AUTOQUERY_INSERT', 1);
57 define('DB_AUTOQUERY_UPDATE', 2);
58 
64 define('DB_FETCHMODE_DEFAULT', 0);
65 
70 define('DB_FETCHMODE_ORDERED', 1);
71 
76 define('DB_FETCHMODE_ASSOC', 2);
77 
78 /* for compatibility */
79 
80 define('DB_GETMODE_ORDERED', DB_FETCHMODE_ORDERED);
81 define('DB_GETMODE_ASSOC', DB_FETCHMODE_ASSOC);
82 
89 define('DB_TABLEINFO_ORDER', 1);
90 define('DB_TABLEINFO_ORDERTABLE', 2);
91 define('DB_TABLEINFO_FULL', 3);
92 }
93 
101 class DB
102 {
112  function factory($type)
113  {
114  include_once(ADODB_DIR."/drivers/adodb-$type.inc.php");
115  $obj = NewADOConnection($type);
116  if (!is_object($obj)) $obj = new PEAR_Error('Unknown Database Driver: '.$dsninfo['phptype'],-1);
117  return $obj;
118  }
119 
139  function connect($dsn, $options = false)
140  {
141  if (is_array($dsn)) {
142  $dsninfo = $dsn;
143  } else {
144  $dsninfo = DB::parseDSN($dsn);
145  }
146  switch ($dsninfo["phptype"]) {
147  case 'pgsql': $type = 'postgres7'; break;
148  case 'ifx': $type = 'informix9'; break;
149  default: $type = $dsninfo["phptype"]; break;
150  }
151 
152  if (is_array($options) && isset($options["debug"]) &&
153  $options["debug"] >= 2) {
154  // expose php errors with sufficient debug level
155  @include_once("adodb-$type.inc.php");
156  } else {
157  @include_once("adodb-$type.inc.php");
158  }
159 
160  @$obj = NewADOConnection($type);
161  if (!is_object($obj)) {
162  $obj = new PEAR_Error('Unknown Database Driver: '.$dsninfo['phptype'],-1);
163  return $obj;
164  }
165  if (is_array($options)) {
166  foreach($options as $k => $v) {
167  switch(strtolower($k)) {
168  case 'persist':
169  case 'persistent': $persist = $v; break;
170  #ibase
171  case 'dialect': $obj->dialect = $v; break;
172  case 'charset': $obj->charset = $v; break;
173  case 'buffers': $obj->buffers = $v; break;
174  #ado
175  case 'charpage': $obj->charPage = $v; break;
176  #mysql
177  case 'clientflags': $obj->clientFlags = $v; break;
178  }
179  }
180  } else {
181  $persist = false;
182  }
183 
184  if (isset($dsninfo['socket'])) $dsninfo['hostspec'] .= ':'.$dsninfo['socket'];
185  else if (isset($dsninfo['port'])) $dsninfo['hostspec'] .= ':'.$dsninfo['port'];
186 
187  if($persist) $ok = $obj->PConnect($dsninfo['hostspec'], $dsninfo['username'],$dsninfo['password'],$dsninfo['database']);
188  else $ok = $obj->Connect($dsninfo['hostspec'], $dsninfo['username'],$dsninfo['password'],$dsninfo['database']);
189 
190  if (!$ok) $obj = ADODB_PEAR_Error();
191  return $obj;
192  }
193 
199  function apiVersion()
200  {
201  return 2;
202  }
203 
211  function isError($value)
212  {
213  if (!is_object($value)) return false;
214  $class = strtolower(get_class($value));
215  return $class == 'pear_error' || is_subclass_of($value, 'pear_error') ||
216  $class == 'db_error' || is_subclass_of($value, 'db_error');
217  }
218 
219 
229  function isWarning($value)
230  {
231  return false;
232  /*
233  return is_object($value) &&
234  (get_class( $value ) == "db_warning" ||
235  is_subclass_of($value, "db_warning"));*/
236  }
237 
270  function parseDSN($dsn)
271  {
272  if (is_array($dsn)) {
273  return $dsn;
274  }
275 
276  $parsed = array(
277  'phptype' => false,
278  'dbsyntax' => false,
279  'protocol' => false,
280  'hostspec' => false,
281  'database' => false,
282  'username' => false,
283  'password' => false
284  );
285 
286  // Find phptype and dbsyntax
287  if (($pos = strpos($dsn, '://')) !== false) {
288  $str = substr($dsn, 0, $pos);
289  $dsn = substr($dsn, $pos + 3);
290  } else {
291  $str = $dsn;
292  $dsn = NULL;
293  }
294 
295  // Get phptype and dbsyntax
296  // $str => phptype(dbsyntax)
297  if (preg_match('|^(.+?)\((.*?)\)$|', $str, $arr)) {
298  $parsed['phptype'] = $arr[1];
299  $parsed['dbsyntax'] = (empty($arr[2])) ? $arr[1] : $arr[2];
300  } else {
301  $parsed['phptype'] = $str;
302  $parsed['dbsyntax'] = $str;
303  }
304 
305  if (empty($dsn)) {
306  return $parsed;
307  }
308 
309  // Get (if found): username and password
310  // $dsn => username:password@protocol+hostspec/database
311  if (($at = strpos($dsn,'@')) !== false) {
312  $str = substr($dsn, 0, $at);
313  $dsn = substr($dsn, $at + 1);
314  if (($pos = strpos($str, ':')) !== false) {
315  $parsed['username'] = urldecode(substr($str, 0, $pos));
316  $parsed['password'] = urldecode(substr($str, $pos + 1));
317  } else {
318  $parsed['username'] = urldecode($str);
319  }
320  }
321 
322  // Find protocol and hostspec
323  // $dsn => protocol+hostspec/database
324  if (($pos=strpos($dsn, '/')) !== false) {
325  $str = substr($dsn, 0, $pos);
326  $dsn = substr($dsn, $pos + 1);
327  } else {
328  $str = $dsn;
329  $dsn = NULL;
330  }
331 
332  // Get protocol + hostspec
333  // $str => protocol+hostspec
334  if (($pos=strpos($str, '+')) !== false) {
335  $parsed['protocol'] = substr($str, 0, $pos);
336  $parsed['hostspec'] = urldecode(substr($str, $pos + 1));
337  } else {
338  $parsed['hostspec'] = urldecode($str);
339  }
340 
341  // Get dabase if any
342  // $dsn => database
343  if (!empty($dsn)) {
344  $parsed['database'] = $dsn;
345  }
346 
347  return $parsed;
348  }
349 
361  function assertExtension($name)
362  {
363  if (!extension_loaded($name)) {
364  $dlext = (strncmp(PHP_OS,'WIN',3) === 0) ? '.dll' : '.so';
365  @dl($name . $dlext);
366  }
367  if (!extension_loaded($name)) {
368  return false;
369  }
370  return true;
371  }
372 }
apiVersion()
parseDSN($dsn)
isWarning($value)
factory($type)
ADODB_PEAR_Error()
isError($value)
assertExtension($name)
connect($dsn, $options=false)
const ADODB_PEAR