| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 | <?php namespace System;class DB {	/**	 * The established database connections.	 *	 * @var array	 */	public static $connections = array();	/**	 * Get a database connection. If no database name is specified, the default	 * connection will be returned as defined in the db configuration file.	 *	 * Note: Database connections are managed as singletons.	 *	 * @param  string  $connection	 * @return PDO	 */	public static function connection($connection = null)	{		if (is_null($connection))		{			$connection = Config::get('db.default');		}		if ( ! array_key_exists($connection, static::$connections))		{			static::$connections[$connection] = DB\Connector::connect($connection);		}		return static::$connections[$connection];	}	/**	 * Execute a SQL query against the connection.	 *	 * The method returns the following based on query type:	 *	 *     SELECT -> Array of stdClasses	 *     UPDATE -> Number of rows affected.	 *     DELETE -> Number of Rows affected.	 *     ELSE   -> Boolean true / false depending on success.	 *	 * @param  string  $sql	 * @param  array   $bindings	 * @param  string  $connection	 * @return mixed	 */	public static function query($sql, $bindings = array(), $connection = null)	{		$query = static::connection($connection)->prepare($sql);		$bindings = array_values($bindings);		foreach ($bindings as $key => &$binding)		{			if (is_null($binding))			{				$query->bindValue($key + 1, null, \PDO::PARAM_INT);			}			else			{				$query->bindParam($key + 1, $binding);			}		}		$result = $query->execute();		if (strpos(strtoupper($sql), 'SELECT') === 0)		{			return $query->fetchAll(\PDO::FETCH_CLASS, 'stdClass');		}		elseif (strpos(strtoupper($sql), 'UPDATE') === 0 or strpos(strtoupper($sql), 'DELETE') === 0)		{			return $query->rowCount();		}		else		{			return $result;		}	}	/**	 * Begin a fluent query against a table.	 *	 * This method is simply a convenient shortcut into Query::table.	 *	 * @param  string  $table	 * @param  string  $connection	 * @return Query	 */	public static function table($table, $connection = null)	{		return new DB\Query($table, $connection);	}	/**	 * Get the driver name for a database connection.	 *	 * @param  string  $connection	 * @return string	 */	public static function driver($connection = null)	{		return static::connection($connection)->getAttribute(\PDO::ATTR_DRIVER_NAME);	}	/**	 * Get the table prefix for a database connection.	 *	 * @param  string  $connection	 * @return string	 */	public static function prefix($connection = null)	{		$connections = Config::get('db.connections');		if (is_null($connection))		{			$connection = Config::get('db.default');		}		return (array_key_exists('prefix', $connections[$connection])) ? $connections[$connection]['prefix'] : '';	}}
 |