📄 dbmanager.php
字号:
<?php
// ------------------------------------------------------------------------ //
// XOOPS - PHP Content Management System //
// Copyright (c) 2000 XOOPS.org //
// <http://www.xoops.org/> //
// ------------------------------------------------------------------------ //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// You may not change or alter any portion of this comment or credits //
// of supporting developers from this source code or any supporting //
// source code which is considered copyrighted (c) material of the //
// original comment or credit authors. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program; if not, write to the Free Software //
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //
// ------------------------------------------------------------------------ //
include_once XOOPS_ROOT_PATH.'/class/logger.php';
include_once XOOPS_ROOT_PATH.'/class/database/databasefactory.php';
include_once XOOPS_ROOT_PATH.'/class/database/'.XOOPS_DB_TYPE.'database.php';
include_once XOOPS_ROOT_PATH.'/class/database/sqlutility.php';
/**
* database manager for XOOPS installer
*
* @author Haruki Setoyama <haruki@planewave.org>
* @version $Id: dbmanager.php 507 2006-05-26 23:39:35Z skalpa $
* @access public
**/
class db_manager {
var $s_tables = array();
var $f_tables = array();
var $db;
function db_manager(){
$this->db = XoopsDatabaseFactory::getDatabase();
$this->db->setPrefix(XOOPS_DB_PREFIX);
$this->db->setLogger(XoopsLogger::instance());
}
function isConnectable(){
return ($this->db->connect(false) != false) ? true : false;
}
function dbExists(){
return ($this->db->connect() != false) ? true : false;
}
function setDBCharacterset(){
$result = true;
$charsets = array();
if (defined('_INSTALL_DBCHARSET_INSTALL') && _INSTALL_DBCHARSET_INSTALL) {
$charsets[] = _INSTALL_DBCHARSET_INSTALL;
}
if (defined('_INSTALL_DBCHARSET') && _INSTALL_DBCHARSET) {
$charset[] = _INSTALL_DBCHARSET;
}
foreach ($charsets as $charset) {
$collations = array();
if ( $result = $this->db->query("SHOW COLLATION WHERE CHARSET = '{$charset}'") ) {
while ( $row = $this->db->fetchArray($result) ) {
$collations[] = $row["Collation"];
}
if (!empty($collations)) {
$db_charset = $charset;
break;
}
}
}
if (!empty($db_charset)) {
if (defined('_INSTALL_DBCOLLATION_INSTALL') && _INSTALL_DBCOLLATION_INSTALL) {
if (in_array(_INSTALL_DBCOLLATION_INSTALL, $collations)) $db_charset .= " COLLATE "._INSTALL_DBCOLLATION_INSTALL;
}
$result = $this->db->query("ALTER DATABASE `".XOOPS_DB_NAME."` DEFAULT CHARACTER SET {$db_charset}");
}
return $result;
}
function createDB()
{
$this->db->connect(false);
$result = $this->db->query("CREATE DATABASE ".XOOPS_DB_NAME);
return ($result != false) ? true : false;
}
function queryFromFile($sql_file_path){
$tables = array();
if (!file_exists($sql_file_path)) {
return false;
}
$sql_query = trim(fread(fopen($sql_file_path, 'r'), filesize($sql_file_path)));
SqlUtility::splitMySqlFile($pieces, $sql_query);
$this->db->connect();
foreach ($pieces as $piece) {
$piece = trim($piece);
// [0] contains the prefixed query
// [4] contains unprefixed table name
$prefixed_query = SqlUtility::prefixQuery($piece, $this->db->prefix());
if ($prefixed_query != false ) {
$table = $this->db->prefix($prefixed_query[4]);
if($prefixed_query[1] == 'CREATE TABLE'){
if ($this->db->query($prefixed_query[0]) != false) {
if(! isset($this->s_tables['create'][$table])){
$this->s_tables['create'][$table] = 1;
}
}else{
if(! isset($this->f_tables['create'][$table])){
$this->f_tables['create'][$table] = 1;
}
}
}
elseif($prefixed_query[1] == 'INSERT INTO'){
if ($this->db->query($prefixed_query[0]) != false) {
if(! isset($this->s_tables['insert'][$table])){
$this->s_tables['insert'][$table] = 1;
}else{
$this->s_tables['insert'][$table]++;
}
}else{
if(! isset($this->f_tables['insert'][$table])){
$this->f_tables['insert'][$table] = 1;
}else{
$this->f_tables['insert'][$table]++;
}
}
}elseif($prefixed_query[1] == 'ALTER TABLE'){
if ($this->db->query($prefixed_query[0]) != false) {
if(! isset($this->s_tables['alter'][$table])){
$this->s_tables['alter'][$table] = 1;
}
}else{
if(! isset($this->s_tables['alter'][$table])){
$this->f_tables['alter'][$table] = 1;
}
}
}elseif($prefixed_query[1] == 'DROP TABLE'){
if ($this->db->query('DROP TABLE '.$table) != false) {
if(! isset($this->s_tables['drop'][$table])){
$this->s_tables['drop'][$table] = 1;
}
}else{
if(! isset($this->s_tables['drop'][$table])){
$this->f_tables['drop'][$table] = 1;
}
}
}
}
}
return true;
}
function report(){
$content = "<table align='center'><tr><td align='left'>\n";
if (isset($this->s_tables['create'])) {
foreach($this->s_tables['create'] as $key => $val){
$content .= _OKIMG.sprintf(_INSTALL_L45, "<b>$key</b>")."<br />\n";
}
}
if (isset($this->s_tables['insert'])) {
foreach($this->s_tables['insert'] as $key => $val){
$content .= _OKIMG.sprintf(_INSTALL_L119, $val, "<b>$key</b>")."<br />\n";
}
}
if (isset($this->s_tables['alter'])) {
foreach($this->s_tables['alter'] as $key => $val){
$content .= _OKIMG.sprintf(_INSTALL_L133, "<b>$key</b>")."<br />\n";
}
}
if (isset($this->s_tables['drop'])) {
foreach($this->s_tables['drop'] as $key => $val){
$content .= _OKIMG.sprintf(_INSTALL_L163, "<b>$key</b>")."<br />\n";
}
}
$content .= "<br />\n";
if (isset($this->f_tables['create'])) {
foreach($this->f_tables['create'] as $key => $val){
$content .= _NGIMG.sprintf(_INSTALL_L118, "<b>$key</b>")."<br />\n";
}
}
if (isset($this->f_tables['insert'])) {
foreach($this->f_tables['insert'] as $key => $val){
$content .= _NGIMG.sprintf(_INSTALL_L120, $val, "<b>$key</b>")."<br />\n";
}
}
if (isset($this->f_tables['alter'])) {
foreach($this->f_tables['alter'] as $key => $val){
$content .= _NGIMG.sprintf(_INSTALL_L134, "<b>$key</b>")."<br />\n";
}
}
if (isset($this->f_tables['drop'])) {
foreach($this->f_tables['drop'] as $key => $val){
$content .= _NGIMG.sprintf(_INSTALL_L164, "<b>$key</b>")."<br />\n";
}
}
$content .= "</td></tr></table>\n";
return $content;
}
function query($sql){
$this->db->connect();
return $this->db->query($sql);
}
function prefix($table){
$this->db->connect();
return $this->db->prefix($table);
}
function fetchArray($ret){
$this->db->connect();
return $this->db->fetchArray($ret);
}
function insert($table, $query){
$this->db->connect();
$table = $this->db->prefix($table);
$query = 'INSERT INTO '.$table.' '.$query;
if(!$this->db->queryF($query)){
//var_export($query);
//echo '<br />' . mysql_error() . '<br />';
if(!isset($this->f_tables['insert'][$table])){
$this->f_tables['insert'][$table] = 1;
}else{
$this->f_tables['insert'][$table]++;
}
return false;
}else{
if(!isset($this->s_tables['insert'][$table])){
$this->s_tables['insert'][$table] = 1;
}else{
$this->s_tables['insert'][$table]++;
}
return $this->db->getInsertId();
}
}
function isError(){
return (isset($this->f_tables)) ? true : false;
}
function deleteTables($tables){
$deleted = array();
$this->db->connect();
foreach ($tables as $key => $val) {
if(! $this->db->query("DROP TABLE ".$this->db->prefix($key))){
$deleted[] = $ct;
}
}
return $deleted;
}
function tableExists($table){
$table = trim($table);
$ret = false;
if ($table != '') {
$this->db->connect();
$sql = 'SELECT * FROM '.$this->db->prefix($table);
$ret = (false != $this->db->query($sql)) ? true : false;
}
return $ret;
}
}
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -