⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 peardb.class.php

📁 Ajax最流行书籍
💻 PHP
字号:
<?php/** * XOAD Events PearDB Provider file. * * <p>This file defines the {@link XOAD_Events_Storage_PearDB} Class.</p> * <p>Example:</p> * <code> * <?php * * require_once('xoad.php'); * require_once('DB.php'); // Include the Pear::DB package * * require_once(XOAD_BASE . '/classes/events/storage/PearDB.class.php'); * * $storage = new XOAD_Events_Storage_PearDB('type=?;server=?;user=?;password=?;database=?;[port=?]'); * * $storage->postEvent('event', 'class'); * * ?> * </code> * * @author		Norm 2782 * * @package		XOAD * * @subpackage	XOAD_Events * * @version		0.6.0.0 * *//** * Defines the table name in the PearDB database that is used to save the * events information (default value: xoad_events). * * @ignore * */define('XOAD_EVENTS_TABLE_NAME', 'xoad_events');/** * XOAD Events Storage PearDB Class. * * <p>This class is a {@link XOAD_Events_Storage} successor.</p> * <p>The class allows you to save events information in * PearDB compatible database.</p> * <p>Pear::DB supported databases (type parameter)</p> * - dbase 	- dBase * - fbsql 	- FrontBase * - ibase 	- InterBase * - ifx	- Informix * - msql	- Mini SQL * - mssql	- Microsoft SQL Server * - mysql	- MySQL (for servers running MySQL <= 4.0) * - mysqli	- MySQL (for servers running MySQL >= 4.1) * - oci8	- Oracle 7/8/9 * - odbc	- Open Database Connectivity * - pgsql	- PostgreSQL * - sqlite	- SQLite * - sybase	- Sybase * <p>Example:</p> * <code> * <?php * * require_once('xoad.php'); * require_once('DB.php'); * * require_once(XOAD_BASE . '/classes/events/storage/PearDB.class.php'); * * $storage = new XOAD_Events_Storage_PearDB('type=?;server=?;user=?;password=?;database=?;[port=?]'); * * $storage->postEvent('event', 'class'); * * ?> * </code> * * @author		Norm 2782 * * @package		XOAD * * @subpackage	XOAD_Events * * @version		0.6.0.0 * */class XOAD_Events_Storage_PearDB extends XOAD_Events_Storage{	/**	 * Holds the PearDB Database type setting used in the connection string.	 *	 * @access	protected	 *	 * @var		string	 *	 */	var $type;	/**	 * Holds the PearDB server used in the connection string.	 *	 * @access	protected	 *	 * @var		string	 *	 */	var $server;	/**	 * Holds the PearDB user used in the connection string.	 *	 * @access	protected	 *	 * @var		string	 *	 */	var $user;	/**	 * Holds the PearDB password used in the connection string.	 *	 * @access	protected	 *	 * @var		string	 *	 */	var $password;	/**	 * Holds the PearDB database used in the connection string.	 *	 * @access	protected	 *	 * @var		string	 *	 */	var $database;	/**	 * Holds the PearDB port used in the connection string.	 *	 * @access	protected	 *	 * @var		string	 *	 */	var $port;	/**	 * Holds the PearDB DSN for reconnection to database.	 *	 * @access	protected	 *	 * @var		resource	 *	 */	var $pearDSN;	/**	 * Creates a new instance of the {@link XOAD_Events_Storage_PearDB} class.	 *	 * @access	public	 *	 * @param	string	$dsn	The data source name and parameters to use	 *							when connecting with PearDB.	 * 	 */	function XOAD_Events_Storage_PearDB($dsn)	{		parent::XOAD_Events_Storage($dsn);		$this->pearDSN = "{$this->type}://{$this->user}:{$this->password}@{$this->server}";		if ( ! empty($this->port)) {			$this->pearDSN .= ':' . $this->port;		}		$this->pearDSN .= '/' . $this->database;	}	/**	 * Retrieves a static instance of the {@link XOAD_Events_Storage_PearDB} class.	 *	 * <p>This method overrides {@link XOAD_Events_Storage::getStorage}.</p>	 *	 * @access	public	 *	 * @param	string	$dsn	The data source name and parameters to use	 *							when connecting with PearDB.	 *	 * @return	object	A static instance to the	 *					{@link XOAD_Events_Storage_PearDB} class.	 *	 * @static	 * 	 */	function &getStorage($dsn)	{		static $instance;		if ( ! isset($instance)) {			$instance = new XOAD_Events_Storage_PearDB($dsn);		}		return $instance;	}	/**	 * Creates a PearDB connection link.	 *	 * @access	private	 *	 * @return	resource	 *	 */	function &getConnection()	{		$connection =& DB::connect($this->pearDSN);		$connection->setFetchMode(DB_FETCHMODE_ASSOC);		return $connection;	}	/**	 * Closes a PearDB connection link.	 *	 * @access	private	 *	 * @return	void	 *	 */	function closeConnection(&$connection)	{		$connection->disconnect();		$connection = null;	}	/**	 * Escapes special characters in the {@link $unescapedString},	 * taking into account the current charset of the connection.	 *	 * @access	private	 *	 * @return	string	 *	 */	function escapeString($unescapedString, &$connection)	{		return $connection->escapeSimple($unescapedString);	}	/** 	 * Posts multiple events to the database.	 *	 * <p>Valid keys for each event are:</p>	 * - event		- the event name (case-sensitive);	 * - className	- the class that is the source of the event;	 * - sender		- the sender object of the event;	 * - data		- the data associated with the event;	 * - filter		- the event filter data (case-insensitive);	 *				  using this key you can post events with	 *				  the same name but with different filter data;	 *				  the client will respond to them individually;	 * - time		- the event start time (seconds since the Unix	 *				  Epoch (January 1 1970 00:00:00 GMT);	 * - lifetime	- the event lifetime (in seconds);	 *	 * @access	public	 *	 * @param	array	$eventsData		Array containing associative arrays	 *									with information for each event.	 *	 * @return	bool	true on success, false otherwise.	 *	 */	function postMultipleEvents($eventsData)	{		$connection =& $this->getConnection();		foreach ($eventsData as $event) {			if ( ! parent::postMultipleEvents($event)) {				continue;			}			$sqlQuery = '				INSERT INTO					`' . XOAD_EVENTS_TABLE_NAME . '`				(					`event`,					`className`,					`filter`,					`sender`,					`data`,					`time`,					`endTime`				)				VALUES				(					\'' . $this->escapeString($event['event'], $connection) . '\',					\'' . $this->escapeString($event['className'], $connection) . '\',			';			if (isset($event['filter'])) {				$sqlQuery .= '\'' . $this->escapeString($event['filter'], $connection) . '\',';			} else {				$sqlQuery .= 'NULL,';			}			if (isset($event['sender'])) {				$sqlQuery .= '\'' . $this->escapeString(serialize($event['sender']), $connection) . '\',';			} else {				$sqlQuery .= 'NULL,';			}			if (isset($event['data'])) {				$sqlQuery .= '\'' . $this->escapeString(serialize($event['data']), $connection) . '\',';			} else {				$sqlQuery .= 'NULL,';			}			$sqlQuery .= '					' . $this->escapeString($event['time'], $connection) . ',					' . $this->escapeString($event['time'] + $event['lifetime'], $connection) . '				)';			$connection->query($sqlQuery);		}		$this->closeConnection($connection);		return true;	}	/** 	 * Deletes old events from the database.	 *	 * <p>This method is called before calling {@link filterEvents}	 * or {@link filterMultipleEvents} to delete all expired events	 * from the database.</p>	 *	 * @access	public	 *	 * @return	bool	true on success, false otherwise.	 *	 */	function cleanEvents()	{		$connection =& $this->getConnection();		$time = parent::cleanEvents();		$sqlQuery = '			DELETE FROM				`' . XOAD_EVENTS_TABLE_NAME . '`			WHERE				`endTime` < ' . $this->escapeString($time, $connection) . '		';		$connection->query($sqlQuery);		$this->closeConnection($connection);		return true;	}	/** 	 * Filters the events in the database using multiple criterias.	 *	 * <p>Valid keys for each event are:</p>	 * - event		- the event name (case-sensitive);	 * - className	- the class that is the source of the event;	 * - filter		- the event filter data (case-insensitive);	 * 				  using this argument you can filter events with	 *				  the same name but with different filter data;	 * - time		- the event start time (seconds since the Unix	 *				  Epoch (January 1 1970 00:00:00 GMT).	 *	 * @access	public	 *	 * @param	array	$eventsData		Array containing associative arrays	 *									with information for each event.	 *	 * @return	array	Sequental array that contains all events that match the	 *					supplied criterias, ordered by time (ascending).	 *	 */	function filterMultipleEvents($eventsData)	{		$connection =& $this->getConnection();		$sqlQuery = '			SELECT				`event`,				`className`,				`filter`,				`sender`,				`data`,				`time`,				`endTime`			FROM				`' . XOAD_EVENTS_TABLE_NAME . '`			WHERE		';		$index = 0;		$length = sizeof($eventsData);		foreach ($eventsData as $event) {			if ( ! parent::filterMultipleEvents($event)) {				continue;			}			$sqlQuery .= '(				`time` > ' . $this->escapeString($event['time'], $connection) . '				AND				`event` = \'' . $this->escapeString($event['event'], $connection) . '\'				AND				`className` = \'' . $this->escapeString($event['className'], $connection) . '\'			';			if (isset($event['filter'])) {				$sqlQuery .= 'AND `filter` = \'' . $this->escapeString($event['filter'], $connection) . '\'';			}			if ($index < $length - 1) {				$sqlQuery .= ') OR ';			} else {				$sqlQuery .= ')';			}			$index ++;		}		$sqlQuery .= '			ORDER BY				`time` ASC		';		$events = array();		$sqlResult =& $connection->query($sqlQuery);		while (($row =& $sqlResult->fetchRow()) != false) {			$events[] = array(			'event'		=>	$row['event'],			'className'	=>	$row['className'],			'filter'	=>	$row['filter'],			'time'		=>	(float) $row['time'],			'endTime'	=>	(float) $row['endTime'],			'eventData'	=>	array(			'sender'	=>	($row['sender'] === null ? null : unserialize($row['sender'])),			'data'		=>	($row['data'] === null ? null : unserialize($row['data']))			));		}		$sqlResult->free();		$this->closeConnection($connection);		return $events;	}}?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -