Packages

  • Nette
    • Application
      • Diagnostics
      • Responses
      • Routers
      • UI
    • Caching
      • Storages
    • ComponentModel
    • Config
      • Adapters
      • Extensions
    • Database
      • Diagnostics
      • Drivers
      • Reflection
      • Table
    • DI
      • Diagnostics
    • Diagnostics
    • Forms
      • Controls
      • Rendering
    • Http
    • Iterators
    • Latte
      • Macros
    • Loaders
    • Localization
    • Mail
    • Reflection
    • Security
      • Diagnostics
    • Templating
    • Utils
      • PhpGenerator
  • NetteModule
  • none

Classes

Interfaces

  • Overview
  • Package
  • Class
  • Tree
  • Deprecated
  • Other releases
  • Nette homepage
  1: <?php
  2: 
  3: /**
  4:  * This file is part of the Nette Framework (https://nette.org)
  5:  * Copyright (c) 2004 David Grudl (http://davidgrudl.com)
  6:  * @package Nette\Database
  7:  */
  8: 
  9: 
 10: 
 11: /**
 12:  * Represents a connection between PHP and a database server.
 13:  *
 14:  * @author     David Grudl
 15:  *
 16:  * @property       IReflection          $databaseReflection
 17:  * @property-read  ISupplementalDriver  $supplementalDriver
 18:  * @property-read  string               $dsn
 19:  * @package Nette\Database
 20:  */
 21: class NConnection extends PDO
 22: {
 23:     /** @var string */
 24:     private $dsn;
 25: 
 26:     /** @var ISupplementalDriver */
 27:     private $driver;
 28: 
 29:     /** @var NSqlPreprocessor */
 30:     private $preprocessor;
 31: 
 32:     /** @var IReflection */
 33:     private $databaseReflection;
 34: 
 35:     /** @var NCache */
 36:     private $cache;
 37: 
 38:     /** @var array of function(Statement $result, $params); Occurs after query is executed */
 39:     public $onQuery;
 40: 
 41: 
 42:     public function __construct($dsn, $username = NULL, $password = NULL, array $options = NULL, $driverClass = NULL)
 43:     {
 44:         parent::__construct($this->dsn = $dsn, $username, $password, $options);
 45:         $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 46:         $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('NStatement', array($this)));
 47: 
 48:         $driverClass = ($tmp=$driverClass) ? $tmp : 'N' . ucfirst(str_replace('sql', 'Sql', $this->getAttribute(PDO::ATTR_DRIVER_NAME))) . 'Driver';
 49:         $this->driver = new $driverClass($this, (array) $options);
 50:         $this->preprocessor = new NSqlPreprocessor($this);
 51:     }
 52: 
 53: 
 54:     public function getDsn()
 55:     {
 56:         return $this->dsn;
 57:     }
 58: 
 59: 
 60:     /** @return ISupplementalDriver */
 61:     public function getSupplementalDriver()
 62:     {
 63:         return $this->driver;
 64:     }
 65: 
 66: 
 67:     /**
 68:      * Sets database reflection.
 69:      * @return self
 70:      */
 71:     public function setDatabaseReflection(IReflection $databaseReflection)
 72:     {
 73:         $databaseReflection->setConnection($this);
 74:         $this->databaseReflection = $databaseReflection;
 75:         return $this;
 76:     }
 77: 
 78: 
 79:     /** @return IReflection */
 80:     public function getDatabaseReflection()
 81:     {
 82:         if (!$this->databaseReflection) {
 83:             $this->setDatabaseReflection(new NConventionalReflection);
 84:         }
 85:         return $this->databaseReflection;
 86:     }
 87: 
 88: 
 89:     /**
 90:      * Sets cache storage engine.
 91:      * @return self
 92:      */
 93:     public function setCacheStorage(ICacheStorage $storage = NULL)
 94:     {
 95:         $this->cache = $storage ? new NCache($storage, 'Nette.Database.' . md5($this->dsn)) : NULL;
 96:         return $this;
 97:     }
 98: 
 99: 
100:     public function getCache()
101:     {
102:         return $this->cache;
103:     }
104: 
105: 
106:     /**
107:      * Generates and executes SQL query.
108:      * @param  string  statement
109:      * @param  mixed   [parameters, ...]
110:      * @return NStatement
111:      */
112:     public function query($statement)
113:     {
114:         $args = func_get_args();
115:         return $this->queryArgs(array_shift($args), $args);
116:     }
117: 
118: 
119:     /**
120:      * Generates and executes SQL query.
121:      * @param  string  statement
122:      * @param  mixed   [parameters, ...]
123:      * @return int     number of affected rows
124:      */
125:     public function exec($statement)
126:     {
127:         $args = func_get_args();
128:         return $this->queryArgs(array_shift($args), $args)->rowCount();
129:     }
130: 
131: 
132:     /**
133:      * @param  string  statement
134:      * @param  array
135:      * @return NStatement
136:      */
137:     public function queryArgs($statement, $params)
138:     {
139:         foreach ($params as $value) {
140:             if (is_array($value) || is_object($value)) {
141:                 $need = TRUE; break;
142:             }
143:         }
144:         if (isset($need) && $this->preprocessor !== NULL) {
145:             list($statement, $params) = $this->preprocessor->process($statement, $params);
146:         }
147: 
148:         return $this->prepare($statement)->execute($params);
149:     }
150: 
151: 
152:     /********************* shortcuts ****************d*g**/
153: 
154: 
155:     /**
156:      * Shortcut for query()->fetch()
157:      * @param  string  statement
158:      * @param  mixed   [parameters, ...]
159:      * @return NRow
160:      */
161:     public function fetch($args)
162:     {
163:         $args = func_get_args();
164:         return $this->queryArgs(array_shift($args), $args)->fetch();
165:     }
166: 
167: 
168:     /**
169:      * Shortcut for query()->fetchField()
170:      * @param  string  statement
171:      * @param  mixed   [parameters, ...]
172:      * @return mixed
173:      */
174:     public function fetchField($args)
175:     {
176:         $args = func_get_args();
177:         return $this->queryArgs(array_shift($args), $args)->fetchField();
178:     }
179: 
180: 
181:     /**
182:      * Shortcut for query()->fetchColumn()
183:      * @param  string  statement
184:      * @param  mixed   [parameters, ...]
185:      * @return mixed
186:      */
187:     public function fetchColumn($args)
188:     {
189:         $args = func_get_args();
190:         return $this->queryArgs(array_shift($args), $args)->fetchColumn();
191:     }
192: 
193: 
194:     /**
195:      * Shortcut for query()->fetchPairs()
196:      * @param  string  statement
197:      * @param  mixed   [parameters, ...]
198:      * @return array
199:      */
200:     public function fetchPairs($args)
201:     {
202:         $args = func_get_args();
203:         return $this->queryArgs(array_shift($args), $args)->fetchPairs();
204:     }
205: 
206: 
207:     /**
208:      * Shortcut for query()->fetchAll()
209:      * @param  string  statement
210:      * @param  mixed   [parameters, ...]
211:      * @return array
212:      */
213:     public function fetchAll($args)
214:     {
215:         $args = func_get_args();
216:         return $this->queryArgs(array_shift($args), $args)->fetchAll();
217:     }
218: 
219: 
220:     /********************* selector ****************d*g**/
221: 
222: 
223:     /**
224:      * Creates selector for table.
225:      * @param  string
226:      * @return NTableSelection
227:      */
228:     public function table($table)
229:     {
230:         return new NTableSelection($table, $this);
231:     }
232: 
233: 
234:     /********************* NObject behaviour ****************d*g**/
235: 
236: 
237:     /**
238:      * @return NClassReflection
239:      */
240:     public function getReflection()
241:     {
242:         return new NClassReflection($this);
243:     }
244: 
245: 
246:     public function __call($name, $args)
247:     {
248:         return NObjectMixin::call($this, $name, $args);
249:     }
250: 
251: 
252:     public function &__get($name)
253:     {
254:         return NObjectMixin::get($this, $name);
255:     }
256: 
257: 
258:     public function __set($name, $value)
259:     {
260:         return NObjectMixin::set($this, $name, $value);
261:     }
262: 
263: 
264:     public function __isset($name)
265:     {
266:         return NObjectMixin::has($this, $name);
267:     }
268: 
269: 
270:     public function __unset($name)
271:     {
272:         NObjectMixin::remove($this, $name);
273:     }
274: 
275: }
276: 
Nette Framework 2.0.18 (for PHP 5.2, prefixed) API documentation generated by ApiGen 2.8.0