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

📄 dbal.php

📁 这些都是我以前学习是用到的源码
💻 PHP
📖 第 1 页 / 共 2 页
字号:
		return true;	}	/**	* Function for validating values	* @access private	*/	function _sql_validate_value($var)	{		if (is_null($var))		{			return 'NULL';		}		else if (is_string($var))		{			return "'" . $this->sql_escape($var) . "'";		}		else		{			return (is_bool($var)) ? intval($var) : $var;		}	}	/**	* Build sql statement from array for select and select distinct statements	*	* Possible query values: SELECT, SELECT_DISTINCT	*/	function sql_build_query($query, $array)	{		$sql = '';		switch ($query)		{			case 'SELECT':			case 'SELECT_DISTINCT';				$sql = str_replace('_', ' ', $query) . ' ' . $array['SELECT'] . ' FROM ';				$table_array = array();				foreach ($array['FROM'] as $table_name => $alias)				{					if (is_array($alias))					{						foreach ($alias as $multi_alias)						{							$table_array[] = $table_name . ' ' . $multi_alias;						}					}					else					{						$table_array[] = $table_name . ' ' . $alias;					}				}				$sql .= $this->_sql_custom_build('FROM', implode(', ', $table_array));				if (!empty($array['LEFT_JOIN']))				{					foreach ($array['LEFT_JOIN'] as $join)					{						$sql .= ' LEFT JOIN ' . key($join['FROM']) . ' ' . current($join['FROM']) . ' ON (' . $join['ON'] . ')';					}				}				if (!empty($array['WHERE']))				{					$sql .= ' WHERE ' . $this->_sql_custom_build('WHERE', $array['WHERE']);				}				if (!empty($array['GROUP_BY']))				{					$sql .= ' GROUP BY ' . $array['GROUP_BY'];				}				if (!empty($array['ORDER_BY']))				{					$sql .= ' ORDER BY ' . $array['ORDER_BY'];				}			break;		}		return $sql;	}	/**	* display sql error page	*/	function sql_error($sql = '')	{		global $auth, $user;		// Set var to retrieve errored status		$this->sql_error_triggered = true;		$this->sql_error_sql = $sql;		$error = $this->_sql_error();		if (!$this->return_on_error)		{			$message = '<u>SQL ERROR</u> [ ' . $this->sql_layer . ' ]<br /><br />' . $error['message'] . ' [' . $error['code'] . ']';			// Show complete SQL error and path to administrators only			// Additionally show complete error on installation or if extended debug mode is enabled			// The DEBUG_EXTRA constant is for development only!			if (isset($auth) && ($auth->acl_get('a_') || defined('IN_INSTALL') || defined('DEBUG_EXTRA')))			{				// Print out a nice backtrace...				$backtrace = get_backtrace();				$message .= ($sql) ? '<br /><br /><u>SQL</u><br /><br />' . htmlspecialchars($sql) : '';				$message .= ($backtrace) ? '<br /><br /><u>BACKTRACE</u><br />'  . $backtrace : '';				$message .= '<br />';			}			else			{				// If error occurs in initiating the session we need to use a pre-defined language string				// This could happen if the connection could not be established for example (then we are not able to grab the default language)				if (!isset($user->lang['SQL_ERROR_OCCURRED']))				{					$message .= '<br /><br />An sql error occurred while fetching this page. Please contact an administrator if this problem persists.';				}				else				{					$message .= '<br /><br />' . $user->lang['SQL_ERROR_OCCURRED'];				}			}			if ($this->transaction)			{				$this->sql_transaction('rollback');			}			if (strlen($message) > 1024)			{				// We need to define $msg_long_text here to circumvent text stripping.				global $msg_long_text;				$msg_long_text = $message;				trigger_error(false, E_USER_ERROR);			}			trigger_error($message, E_USER_ERROR);		}				return $error;	}	/**	* Explain queries	*/	function sql_report($mode, $query = '')	{		global $cache, $starttime, $phpbb_root_path, $user;		if (empty($_REQUEST['explain']))		{			return false;		}		if (!$query && $this->query_hold != '')		{			$query = $this->query_hold;		}		switch ($mode)		{			case 'display':				if (!empty($cache))				{					$cache->unload();				}				$this->sql_close();				$mtime = explode(' ', microtime());				$totaltime = $mtime[0] + $mtime[1] - $starttime;				echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">					<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">					<head>						<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />						<meta http-equiv="Content-Style-Type" content="text/css" />						<meta http-equiv="imagetoolbar" content="no" />						<title>SQL Report</title>						<link href="' . $phpbb_root_path . 'adm/style/admin.css" rel="stylesheet" type="text/css" media="screen" />					</head>					<body id="errorpage">					<div id="wrap">						<div id="page-header">							<a href="' . build_url('explain') . '">Return to previous page</a>						</div>						<div id="page-body">							<div class="panel">								<span class="corners-top"><span></span></span>								<div id="content">									<h1>SQL Report</h1>									<br />									<p><b>Page generated in ' . round($totaltime, 4) . " seconds with {$this->num_queries['normal']} queries" . (($this->num_queries['cached']) ? " + {$this->num_queries['cached']} " . (($this->num_queries['cached'] == 1) ? 'query' : 'queries') . ' returning data from cache' : '') . '</b></p>									<p>Time spent on ' . $this->sql_layer . ' queries: <b>' . round($this->sql_time, 5) . 's</b> | Time spent on PHP: <b>' . round($totaltime - $this->sql_time, 5) . 's</b></p>									<br /><br />									' . $this->sql_report . '								</div>								<span class="corners-bottom"><span></span></span>							</div>						</div>						<div id="page-footer">							Powered by phpBB &copy; ' . date('Y') . ' <a href="http://www.phpbb.com/">phpBB Group</a>						</div>					</div>					</body>					</html>';				exit;				break;			case 'stop':				$endtime = explode(' ', microtime());				$endtime = $endtime[0] + $endtime[1];				$this->sql_report .= '					<table cellspacing="1">					<thead>					<tr>						<th>Query #' . $this->num_queries['total'] . '</th>					</tr>					</thead>					<tbody>					<tr>						<td class="row3"><textarea style="font-family:\'Courier New\',monospace;width:99%" rows="5" cols="10">' . preg_replace('/\t(AND|OR)(\W)/', "\$1\$2", htmlspecialchars(preg_replace('/[\s]*[\n\r\t]+[\n\r\s\t]*/', "\n", $query))) . '</textarea></td>					</tr>					</table>										' . $this->html_hold . '					<p style="text-align: center;">				';				if ($this->query_result)				{					if (preg_match('/^(UPDATE|DELETE|REPLACE)/', $query))					{						$this->sql_report .= 'Affected rows: <b>' . $this->sql_affectedrows($this->query_result) . '</b> | ';					}					$this->sql_report .= 'Before: ' . sprintf('%.5f', $this->curtime - $starttime) . 's | After: ' . sprintf('%.5f', $endtime - $starttime) . 's | Elapsed: <b>' . sprintf('%.5f', $endtime - $this->curtime) . 's</b>';				}				else				{					$error = $this->sql_error();					$this->sql_report .= '<b style="color: red">FAILED</b> - ' . $this->sql_layer . ' Error ' . $error['code'] . ': ' . htmlspecialchars($error['message']);				}				$this->sql_report .= '</p><br /><br />';				$this->sql_time += $endtime - $this->curtime;			break;			case 'start':				$this->query_hold = $query;				$this->html_hold = '';							$this->_sql_report($mode, $query);				$this->curtime = explode(' ', microtime());				$this->curtime = $this->curtime[0] + $this->curtime[1];			break;						case 'add_select_row':				$html_table = func_get_arg(2);				$row = func_get_arg(3);								if (!$html_table && sizeof($row))				{					$html_table = true;					$this->html_hold .= '<table cellspacing="1"><tr>';													foreach (array_keys($row) as $val)					{						$this->html_hold .= '<th>' . (($val) ? ucwords(str_replace('_', ' ', $val)) : '&nbsp;') . '</th>';					}					$this->html_hold .= '</tr>';				}				$this->html_hold .= '<tr>';				$class = 'row1';				foreach (array_values($row) as $val)				{					$class = ($class == 'row1') ? 'row2' : 'row1';					$this->html_hold .= '<td class="' . $class . '">' . (($val) ? $val : '&nbsp;') . '</td>';				}				$this->html_hold .= '</tr>';							return $html_table;			break;			case 'fromcache':				$this->_sql_report($mode, $query);			break;			case 'record_fromcache':				$endtime = func_get_arg(2);				$splittime = func_get_arg(3);				$time_cache = $endtime - $this->curtime;				$time_db = $splittime - $endtime;				$color = ($time_db > $time_cache) ? 'green' : 'red';				$this->sql_report .= '<table cellspacing="1"><thead><tr><th>Query results obtained from the cache</th></tr></thead><tbody><tr>';				$this->sql_report .= '<td class="row3"><textarea style="font-family:\'Courier New\',monospace;width:99%" rows="5" cols="10">' . preg_replace('/\t(AND|OR)(\W)/', "\$1\$2", htmlspecialchars(preg_replace('/[\s]*[\n\r\t]+[\n\r\s\t]*/', "\n", $query))) . '</textarea></td></tr></tbody></table>';				$this->sql_report .= '<p style="text-align: center;">';				$this->sql_report .= 'Before: ' . sprintf('%.5f', $this->curtime - $starttime) . 's | After: ' . sprintf('%.5f', $endtime - $starttime) . 's | Elapsed [cache]: <b style="color: ' . $color . '">' . sprintf('%.5f', ($time_cache)) . 's</b> | Elapsed [db]: <b>' . sprintf('%.5f', $time_db) . 's</b></p><br /><br />';				// Pad the start time to not interfere with page timing				$starttime += $time_db;			break;			default:							$this->_sql_report($mode, $query);			break;		}		return true;	}}/***/if (!defined('IN_PHPBB')){	exit;}/*** This variable holds the class name to use later*/$sql_db = 'dbal_' . $dbms;?>

⌨️ 快捷键说明

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