function test_sql_split()
 {
     $sql = "select * from foo;\nselect * from bar";
     $split = sql_split($sql);
     $this->assertEquals(2, count($split));
     $this->assertEquals("select * from foo\n", $split[0]);
     $this->assertEquals("select * from bar\n", $split[1]);
 }
Exemple #2
0
 static function setUpBeforeClass()
 {
     DB::open(array('master' => true, 'driver' => 'sqlite', 'file' => ':memory:'));
     $sql = sql_split("create table qwerty ( foo char(12), bar char(12) );\n\t\tcreate table foo(id int, name char(12));\n\t\tcreate table bar(id int, name char(12), foo int);\n\t\tcreate table gallery (\n\t\t\tid integer primary key,\n\t\t\ttitle char(48)\n\t\t);\n\t\tcreate table cover (\n\t\t\tid integer primary key,\n\t\t\tgallery integer unique,\n\t\t\ttitle char(48)\n\t\t);\n\t\tcreate table item (\n\t\t\tid integer primary key,\n\t\t\tgallery_id integer,\n\t\t\ttitle char(48)\n\t\t);\n\t\tinsert into gallery (id, title) values (1, 'Gallery One');\n\t\tinsert into cover (id, gallery, title) values (1, 1, 'Cover One');\n\t\tinsert into item (id, gallery_id, title) values (1, 1, 'Item One');\n\t\tinsert into item (id, gallery_id, title) values (2, 1, 'Item Two');\n\t\tinsert into item (id, gallery_id, title) values (3, 1, 'Item Three');\n\t\tinsert into gallery (id, title) values (2, 'Gallery Two');\n\t\tinsert into cover (id, gallery, title) values (2, 2, 'Cover Two');\n\t\tinsert into item (id, gallery_id, title) values (4, 2, 'Item Four');\n\t\tinsert into item (id, gallery_id, title) values (5, 2, 'Item Five');\n\t\tinsert into item (id, gallery_id, title) values (6, 2, 'Item Six');\n\t\tcreate table author (\n\t\t\tid integer primary key,\n\t\t\tname char(32)\n\t\t);\n\t\tcreate table book (\n\t\t\tid integer primary key,\n\t\t\tname char(32)\n\t\t);\n\t\tcreate table book_author (\n\t\t\tbook int not null,\n\t\t\tauthor int not null\n\t\t);\n\t\tinsert into author (id, name) values (1, 'Johnny Fast Fingers');\n\t\tinsert into author (id, name) values (2, 'Frankie Bazzar');\n\t\tinsert into book (id, name) values (1, 'Johnny & Frankie');\n\t\tinsert into book (id, name) values (2, 'Jamaican Me Crazy');\n\t\tinsert into book_author (book, author) values (1, 1);\n\t\tinsert into book_author (book, author) values (1, 2);\n\t\tinsert into book_author (book, author) values (2, 1);\n\t\tinsert into book_author (book, author) values (2, 2);\n\t\tcreate table next_test (\n\t\t\tfieldname int not null\n\t\t);\n\t\t");
     foreach ($sql as $query) {
         DB::execute($query);
     }
     self::$q = new Qwerty();
 }
Exemple #3
0
function sql_execute($sql, $replace = 0, $dosubmit1 = 0)
{
    global $db, $tablepre, $met_visit_day, $met_visit_detail, $met_admin_table;
    $split = sql_split($sql);
    $sqls = $split['sql'];
    $info = $split['info'];
    $infos = explode('#', $info);
    $localurl = "http://";
    $localurl .= $_SERVER['HTTP_HOST'] . $_SERVER["PHP_SELF"];
    $localurl_a = explode("/", $localurl);
    $localurl_count = count($localurl_a);
    $localurl_admin = $localurl_a[$localurl_count - 4];
    $localurl_admin = $localurl_admin . "/system/";
    $localurl_real = explode($localurl_admin, $localurl);
    $localurl = $localurl_real[0];
    if ($infos[3] && $tablepre != $infos[3]) {
        $sqlre1 = 1;
    }
    if ($infos[2] && $localurl != $infos[2]) {
        $sqlre2 = 1;
    }
    if (is_array($sqls)) {
        foreach ($sqls as $sql) {
            if ($replace) {
                $sql = str_replace('met_', $tablepre, $sql);
                $sql = str_replace('metconfig_', 'met_', $sql);
            }
            if ($dosubmit1 == '1') {
                $sql = preg_replace(array('/INSERT INTO ' . $met_admin_table . '/', '/DROP TABLE IF EXISTS ' . $met_admin_table . '/', '/CREATE TABLE `' . $met_admin_table . '`/'), array('INSERT INTO test_admin_table1', 'DROP TABLE IF EXISTS test_admin_table1', 'CREATE TABLE `test_admin_table1`'), $sql);
            }
            if ($sqlre1 == 1) {
                $sql = preg_replace(array('/^INSERT INTO ' . $infos[3] . '/', '/^DROP TABLE IF EXISTS ' . $infos[3] . '/', '/^CREATE TABLE `' . $infos[3] . '/'), array('INSERT INTO ' . $tablepre, 'DROP TABLE IF EXISTS ' . $tablepre, 'CREATE TABLE `' . $tablepre), $sql, 1);
            }
            if ($sqlre2 == 1) {
                if (!preg_match('/^INSERT INTO ((' . $met_visit_day . ')|(' . $met_visit_detail . '.))/', $sql)) {
                    $sql = str_replace($infos[2], $localurl, $sql);
                }
            }
            if (trim($sql) != '') {
                if (!$db->query($sql)) {
                    return false;
                }
            }
        }
    } else {
        if (!$db->query($sqls)) {
            return false;
        }
    }
    if ($dosubmit1 == '1') {
        if (!$db->query('DROP TABLE IF EXISTS test_admin_table1')) {
            return false;
        }
    }
    return true;
}
Exemple #4
0
function sql_execute($sql, $tablepre)
{
    $sqls = sql_split($sql, $tablepre);
    if (is_array($sqls)) {
        foreach ($sqls as $sql) {
            if (trim($sql) != '') {
                mysql_query($sql);
            }
        }
    } else {
        mysql_query($sqls);
    }
    return true;
}
Exemple #5
0
/**
 * 数据库处理
 */
function sql_execute(&$db, $sql)
{
    $sqls = sql_split($sql, $db->dbcharset, $db->tablepre);
    if (is_array($sqls)) {
        foreach ($sqls as $sql) {
            if (trim($sql) != '') {
                $db->query($sql);
            }
        }
        return TRUE;
    } else {
        return $db->query($sqls);
    }
}
Exemple #6
0
function sql_execute($sql)
{
    global $db;
    $sqls = sql_split($sql);
    if (is_array($sqls)) {
        foreach ($sqls as $sql) {
            if (trim($sql) != '') {
                $db->query($sql);
            }
        }
    } else {
        $db->query($sqls);
    }
    return true;
}
Exemple #7
0
function upgrade_db($out = false)
{
    loader_import('saf.File.Directory');
    $files = Dir::find('*-' . upgrade_version_num() . '.sql', 'upgrade');
    if (count($files) == 0) {
        return true;
    }
    $file = array_shift($files);
    $sql = join('', file($file));
    $sql = sql_split($sql);
    foreach ($sql as $query) {
        if ($out) {
            echo '<pre>' . $query . '</pre>';
        }
        if (!db_execute($query)) {
            return false;
        }
    }
    return true;
}
Exemple #8
0
    static function setUpBeforeClass()
    {
        DB::open(array('master' => true, 'driver' => 'sqlite', 'file' => ':memory:'));
        DB::$prefix = 'elefant_';
        $sql = sql_split('
			create table #prefix#webpage (
				id char(72) not null primary key,
				title char(72) not null,
				menu_title char(72) not null,
				window_title char(72) not null,
				access char(12) not null,
				layout char(48) not null,
				description text,
				keywords text,
				body text
			);
			insert into #prefix#webpage (id, title, menu_title, window_title, access, layout, description, keywords, body) values ("index", "Welcome to Elefant", "Home", "", "public", "default", "", "", \'<table><tbody><tr><td><h3>Congratulations!</h3>You have successfully installed Elefant, the refreshingly simple new PHP web framework and CMS.</td><td><h3>Getting Started</h3>To log in as an administrator and edit pages, write a blog post, or upload files, go to <a href="/admin">/admin</a>.</td><td><h3>Developers</h3>Documentation, source code and issue tracking can be found at <a href="http://github.com/jbroadway/elefant">github.com/jbroadway/elefant</a></td></tr></tbody></table>\');
		');
        foreach ($sql as $query) {
            if (!DB::execute($query)) {
                die(DB::error());
            }
        }
    }
Exemple #9
0
     printf("Testing patch: %s\n", basename($version['patch']));
     exec('patch --dry-run -p1 -f -i ' . $version['patch'], $output);
     $output = join("\n", $output);
     if (strpos($output, 'FAILED')) {
         Cli::out('Error applying patch ' . $version['patch'], 'error');
         echo "See conf/updates/error.log for details.\n";
         file_put_contents('conf/updates/error.log', $output);
         return;
     }
     // Patch is okay to apply
     echo "Patch ok, applying...\n";
     exec('patch -p1 -f -i ' . $version['patch']);
     // Apply associated database updates
     if ($version['script']) {
         printf("Applying db update: %s\n", basename($version['script']));
         $sqldata = sql_split(file_get_contents($version['script']));
         DB::beginTransaction();
         foreach ($sqldata as $sql) {
             if (!DB::execute($sql)) {
                 $error = DB::error();
                 DB::rollback();
                 Cli::out('Error applying db update: ' . $version['script'], 'error');
                 echo "See conf/updates/error.log for details.\n";
                 file_put_contents('conf/updates/error.log', $error);
                 return;
             }
         }
         DB::commit();
     }
 }
 Cli::out(sprintf("Applied %d updates.", count($versions)), 'success');
Exemple #10
0
			$_POST['host'] = $_POST[$_POST['driver'] . '_host'];
			$_POST['port'] = $_POST[$_POST['driver'] . '_port'];
			$_POST['name'] = $_POST[$_POST['driver'] . '_name'];
			$_POST['user'] = $_POST[$_POST['driver'] . '_user'];
			$_POST['pass'] = $_POST[$_POST['driver'] . '_pass'];
			$_POST['prefix'] = $_POST[$_POST['driver'] . '_prefix'];

			DB::$prefix = $_POST['prefix'];

			if (! DB::open ($_POST)) {
				$data['error'] = DB::error ();
			} else {
				$data['error'] = false;

				// create the database
				$sqldata = sql_split (file_get_contents ('../conf/install_' . $_POST['driver'] . '.sql'));
				foreach ($sqldata as $sql) {
					if (! DB::execute ($sql)) {
						$data['error'] = DB::error ();
						DB::execute ('rollback');
						break;
					}
				}
				
				$wp = new Webpage ('index');
				Versions::add ($wp);
				$b = new Block ('members');
				Versions::add ($b);

				// write the settings
				if (! $data['error']) {
Exemple #11
0
/**
 * 执行文件中SQL语句函数
 * @param string $file sql语句文件路径
 * @param string $tablepre  自己的前缀
 * @return multitype:string 返回最终需要的sql语句
 */
function execute_sql_from_file($file)
{
    $sql_data = file_get_contents($file);
    $sql_format = sql_split($sql_data, C('DB_PREFIX'));
    $counts = count($sql_format);
    for ($i = 0; $i < $counts; $i++) {
        $sql = trim($sql_format[$i]);
        D()->execute($sql);
    }
    return true;
}
Exemple #12
0
$page->title = __ ('Upgrading User App');

// grab the database driver
$conn = conf ('Database', 'master');
$driver = $conn['driver'];

// check if upgrade script exists and if so, run it
$base_version = preg_replace ('/-.*$/', '', $version);
$file = 'apps/' . $this->app . '/conf/upgrade_' . $base_version . '_' . $driver . '.sql';
if (file_exists ($file)) {
    // begin the transaction
    DB::beginTransaction ();

    // parse the database schema into individual queries
    $sql = sql_split (file_get_contents ($file));

    // execute each query in turn
    foreach ($sql as $query) {
        if (! DB::execute ($query)) {
            // show error and rollback on failures
            printf (
                '<p class="visible-notice">%s: %s</p><p>%s</p>',
                __ ('Error'),
                DB::error (),
                __ ('Install failed.')
            );
            DB::rollback ();
            return;
        }
    }
Exemple #13
0
     header(sprintf('Location: ?step=3&dbhost=%s&dbport=%s&database=%s&dbuser=%s&dbpass=%s&drop=%s&error=%s', $cgi->dbhost, $cgi->dbport, $cgi->database, $cgi->dbuser, $cgi->dbpass, $cgi->drop, 'Failed to connect to MySQL: ' . mysql_error()));
     exit;
 }
 if (!@mysql_select_db($cgi->database, $conn)) {
     header(sprintf('Location: ?step=3&dbhost=%s&dbport=%s&database=%s&dbuser=%s&dbpass=%s&drop=%s&error=%s', $cgi->dbhost, $cgi->dbport, $cgi->database, $cgi->dbuser, $cgi->dbpass, $cgi->drop, 'Can\'t use database "' . $cgi->database . '": ' . mysql_error()));
     exit;
 }
 $query = mysql_query('select version()', $conn);
 $version = mysql_result($query, 0);
 mysql_free_result($query);
 if (version_compare($version, '5.0.0', 'ge')) {
     $sql = @join('', @file('install-mysql.sql'));
 } else {
     $sql = @join('', @file('install-old.sql'));
 }
 $sql = sql_split($sql);
 // execute each sql query
 foreach ($sql as $query) {
     if ($cgi->drop == 'yes' && preg_match('/^create table ([^ ]+) /is', $query, $regs)) {
         @mysql_query('drop table ' . $regs[1]);
     }
     if (!@mysql_query($query, $conn)) {
         $data['error'] = true;
         $data['body'] = '<p class="notice">SQL Error: ' . mysql_error() . '</p>';
         break;
     }
 }
 if (!$data['error']) {
     // save info to config.ini.php
     $conf = @join('', @file('../inc/conf/config.ini.php'));
     if ($cgi->dbhost != 'localhost' || $cgi->dbport != 3306) {
 public function recover()
 {
     if ($_GET['do'] == 'delete') {
         foreach ((array) $_POST['files'] as $r) {
             unlink($r);
         }
         $this->success(L('do_ok'));
     } elseif ($_GET['do'] == 'import') {
         header('Content-Type: text/html; charset=UTF-8');
         $filename = $_GET['filename'];
         $filelist = dir_list($this->datadir);
         foreach ((array) $filelist as $r) {
             $file = explode('-', basename($r));
             if ($file[0] == $filename) {
                 $files[] = $r;
             }
         }
         foreach ((array) $files as $file) {
             //读取数据文件
             $sqldata = file_get_contents($file);
             $sqlFormat = sql_split($sqldata, C('DB_PREFIX'));
             foreach ((array) $sqlFormat as $sql) {
                 $sql = trim($sql);
                 if (strstr($sql, 'CREATE TABLE')) {
                     preg_match('/CREATE TABLE `([^ ]*)`/', $sql, $matches);
                     $ret = $this->excuteQuery($sql);
                     //if($ret){echo   L('CREATE_TABLE_OK').$matches[0].' <br />';}else{echo 'Error sql:'.$sql;}exit;
                 } else {
                     $ret = $this->excuteQuery($sql);
                 }
             }
             echo L('CREATE_TABLE_OK') . basename($file) . '<br>';
         }
     } else {
         $filelist = dir_list($this->datadir);
         foreach ((array) $filelist as $r) {
             $filename = explode('-', basename($r));
             $files[] = array('path' => $r, 'file' => basename($r), 'name' => $filename[0], 'size' => filesize($r), 'time' => filemtime($r));
         }
         $this->assign('files', $files);
         $this->display();
     }
 }
 public function mysql()
 {
     $n = intval($_GET['n']);
     $arr = array();
     $dbHost = trim($_POST['dbhost']);
     $dbPort = trim($_POST['dbport']);
     $dbName = trim($_POST['dbname']);
     $dbHost = empty($dbPort) || $dbPort == 3306 ? $dbHost : $dbHost . ':' . $dbPort;
     $dbUser = trim($_POST['dbuser']);
     $dbPwd = trim($_POST['dbpw']);
     $dbPrefix = empty($_POST['dbprefix']) ? 'think_' : trim($_POST['dbprefix']);
     $username = trim($_POST['manager']);
     $password = trim($_POST['manager_pwd']);
     //网站名称
     $site_name = addslashes(trim($_POST['sitename']));
     //网站域名
     $site_url = trim($_POST['siteurl']);
     $_site_url = parse_url($site_url);
     //附件地址
     $sitefileurl = $_site_url['path'] . "d/file/";
     //描述
     $seo_description = trim($_POST['siteinfo']);
     //关键词
     $seo_keywords = trim($_POST['sitekeywords']);
     //测试数据
     $testdata = (int) $_POST['testdata'];
     //邮箱地址
     $siteemail = trim($_POST['manager_email']);
     $conn = @mysql_connect($dbHost, $dbUser, $dbPwd);
     if (!$conn) {
         $arr['msg'] = "连接数据库失败!";
         echo json_encode($arr);
         exit;
     }
     mysql_query("SET NAMES 'utf8'");
     //,character_set_client=binary,sql_mode='';
     $version = mysql_get_server_info($conn);
     if ($version < 5.0) {
         $arr['msg'] = '数据库版本太低!';
         echo json_encode($arr);
         exit;
     }
     if (!mysql_select_db($dbName, $conn)) {
         //创建数据时同时设置编码
         if (!mysql_query("CREATE DATABASE IF NOT EXISTS `" . $dbName . "` DEFAULT CHARACTER SET utf8;", $conn)) {
             $arr['msg'] = '数据库 ' . $dbName . ' 不存在,也没权限创建新的数据库!';
             echo json_encode($arr);
             exit;
         }
         if (empty($n)) {
             $arr['n'] = 1;
             $arr['msg'] = "成功创建数据库:{$dbName}<br>";
             echo json_encode($arr);
             exit;
         }
         mysql_select_db($dbName, $conn);
     }
     //读取数据文件
     $sqldata = file_get_contents(MODULE_PATH . 'Data/shuipfblog.sql');
     //读取测试数据
     if ($testdata) {
         $sqldataDemo = file_get_contents(MODULE_PATH . 'Data/shuipfblog_demo.sql');
         $sqldata = $sqldata . "\r\n" . $sqldataDemo;
     } else {
         //不加测试数据的时候,删除d目录的文件
         try {
             $Dir = new \Dir();
             $Dir->delDir(SITE_PATH . 'd/file/contents/');
         } catch (Exception $exc) {
         }
     }
     $sqlFormat = sql_split($sqldata, $dbPrefix);
     /**
      执行SQL语句
     */
     $counts = count($sqlFormat);
     for ($i = $n; $i < $counts; $i++) {
         $sql = trim($sqlFormat[$i]);
         if (strstr($sql, 'CREATE TABLE')) {
             preg_match('/CREATE TABLE `([^ ]*)`/', $sql, $matches);
             mysql_query("DROP TABLE IF EXISTS `{$matches['1']}");
             $ret = mysql_query($sql);
             if ($ret) {
                 $message = '<li><span class="correct_span">&radic;</span>创建数据表' . $matches[1] . ',完成</li> ';
             } else {
                 $message = '<li><span class="correct_span error_span">&radic;</span>创建数据表' . $matches[1] . ',失败</li>';
             }
             $i++;
             $arr = array('n' => $i, 'msg' => $message);
             echo json_encode($arr);
             exit;
         } else {
             $ret = mysql_query($sql);
             $message = '';
             $arr = array('n' => $i, 'msg' => $message);
             //echo json_encode($arr); exit;
         }
     }
     if ($i == 999999) {
         exit;
     }
     //更新配置信息
     mysql_query("UPDATE `{$dbPrefix}config` SET  `value` = '{$site_name}' WHERE varname='sitename'");
     mysql_query("UPDATE `{$dbPrefix}config` SET  `value` = '{$site_url}' WHERE varname='siteurl' ");
     mysql_query("UPDATE `{$dbPrefix}config` SET  `value` = '{$sitefileurl}' WHERE varname='sitefileurl' ");
     mysql_query("UPDATE `{$dbPrefix}config` SET  `value` = '{$seo_description}' WHERE varname='siteinfo'");
     mysql_query("UPDATE `{$dbPrefix}config` SET  `value` = '{$seo_keywords}' WHERE varname='sitekeywords'");
     mysql_query("UPDATE `{$dbPrefix}config` SET  `value` = '{$siteemail}' WHERE varname='siteemail'");
     //读取配置文件,并替换真实配置数据
     $strConfig = file_get_contents(MODULE_PATH . 'Data/config.php');
     $strConfig = str_replace('#DB_HOST#', $dbHost, $strConfig);
     $strConfig = str_replace('#DB_NAME#', $dbName, $strConfig);
     $strConfig = str_replace('#DB_USER#', $dbUser, $strConfig);
     $strConfig = str_replace('#DB_PWD#', $dbPwd, $strConfig);
     $strConfig = str_replace('#DB_PORT#', $dbPort, $strConfig);
     $strConfig = str_replace('#DB_PREFIX#', $dbPrefix, $strConfig);
     $strConfig = str_replace('#AUTHCODE#', genRandomString(18), $strConfig);
     $strConfig = str_replace('#COOKIE_PREFIX#', genRandomString(3) . "_", $strConfig);
     $strConfig = str_replace('#DATA_CACHE_PREFIX#', genRandomString(3) . "_", $strConfig);
     @file_put_contents(CONF_PATH . 'dataconfig.php', $strConfig);
     //插入管理员
     //生成随机认证码
     $verify = genRandomString(6);
     $time = time();
     $ip = get_client_ip();
     $password = md5($password . md5($verify));
     $query = "INSERT INTO `{$dbPrefix}user` VALUES ('1', '{$username}', '未知', '{$password}', '', '{$time}', '0.0.0.0', '{$verify}', '*****@*****.**', '备注信息', '{$time}', '{$time}', '1', '1', '');";
     mysql_query($query);
     $message = '成功添加管理员<br />成功写入配置文件<br>安装完成.';
     $arr = array('n' => 999999, 'msg' => $message);
     echo json_encode($arr);
     exit;
 }
Exemple #16
0
 $dbh = new \PDO($dsn, $dbUser, $dbPwd);
 $dbh->query('SET NAMES utf8');
 $sth = $dbh->prepare('SELECT version()');
 $sth->execute();
 $version = $sth->fetchColumn();
 if (version_compare($version, '4.2', '<')) {
     throw new \Exception('数据库版本太低!');
 }
 $aff = $dbh->exec(sprintf('CREATE DATABASE IF NOT EXISTS `%s` DEFAULT CHARSET utf8', $dbName));
 if (false === $aff) {
     throw new \Exception(sprintf('创建数据库%s失败', $dbName));
 }
 $dbh->query("USE {$dbName}");
 //读取数据文件
 $sqldata = file_get_contents(SITEDIR . 'install/' . $sqlFile);
 $sqlFormat = sql_split($sqldata, $dbPrefix);
 /**
  * 执行SQL语句
  */
 $counts = count($sqlFormat);
 for ($i = $n; $i < $counts; $i++) {
     $sql = $sqlFormat[$i];
     if (empty($sql)) {
         continue;
     }
     try {
         $ret = $dbh->exec($sql);
         if (strstr($sql, 'CREATE TABLE')) {
             preg_match('/CREATE TABLE (?:IF NOT EXISTS )?`([^ ]*)`/', $sql, $matches);
             //mysqli_query($conn, "DROP TABLE IF EXISTS `$matches[1]");
             if ($ret !== false) {
Exemple #17
0
if (DB::error()) {
    // Add extra column to webpage
    DB::beginTransaction();
    if (!DB::execute('alter table `#prefix#webpage` add column `extra` text')) {
        DB::rollback();
        printf('<p>Error: %s</p>', DB::error());
        return;
    }
    DB::commit();
}
if (ELEFANT_VERSION === '1.3.10') {
    // Add extra user fields, social links, and notes
    DB::beginTransaction();
    $db = DB::get_connection(1);
    $dbtype = $db->getAttribute(PDO::ATTR_DRIVER_NAME);
    $sqldata = sql_split(file_get_contents('apps/admin/conf/update/1.3.10_users_' . $dbtype . '.sql'));
    foreach ($sqldata as $sql) {
        if (!DB::execute($sql)) {
            DB::rollback();
            printf('<p>Error: %s</p>', DB::error());
            return;
        }
    }
    DB::commit();
} elseif (ELEFANT_VERSION === '1.3.6') {
    // Fix filemanager_prop primary key
    DB::beginTransaction();
    $db = DB::get_connection(1);
    $dbtype = $db->getAttribute(PDO::ATTR_DRIVER_NAME);
    switch ($dbtype) {
        case 'pgsql':
Exemple #18
0
<?php

global $cgi, $session;
if ($cgi->sql) {
    $split = sql_split($cgi->sql);
    foreach ($split as $q) {
        if (!is_array($session->get('history'))) {
            $session->append('history', $q);
        } elseif (!in_array($cgi->sql, $session->get('history'))) {
            $session->append('history', $q);
        }
    }
}
if ($cgi->history) {
    $cgi->sql = $cgi->history;
    $split = array($cgi->sql);
}
if (!isset($split)) {
    $split = array();
}
page_title('Database Manager - SQL Shell');
echo template_simple('<p><a href="{site/prefix}/index/myadm-app">Home</a></p>');
?>
<form method="post">
<p align="center">

<textarea name="sql" cols="60" rows="15"><?php 
if (!empty($cgi->sql)) {
    echo htmlentities($cgi->sql);
}
?>
Exemple #19
0
            Cli::out('          settings in conf/config.php and try again.', 'error');
            echo "\n";
            Cli::out('          ' . DB::error(), 'error');
            return;
        }
        $connected = true;
        break;
    }
}
if (!$connected) {
    Cli::out('** Error: Could not find a master database. Please check the', 'error');
    Cli::out('          settings in conf/config.php and try again.', 'error');
    return;
}
// import the database schema
$sqldata = sql_split(file_get_contents('conf/install_' . $conf['Database']['master']['driver'] . '.sql'));
DB::beginTransaction();
foreach ($sqldata as $sql) {
    if (trim($sql) === 'begin' || trim($sql) === 'commit') {
        continue;
    }
    if (!DB::execute($sql)) {
        Cli::out('** Error: ' . DB::error(), 'error');
        DB::rollback();
        return;
    }
}
// change the admin user's password
$pass = generate_password(8);
$date = gmdate('Y-m-d H:i:s');
if (!DB::execute("update `#prefix#user` set `email` = ?, `password` = ? where `id` = 1", $conf['General']['email_from'], User::encrypt_pass($pass))) {
Exemple #20
0
 /**
  * Initializes the `$i18n`, `$cache`, `$page`, and `$tpl` objects
  * for use with the controller in testing handlers.
  */
 public static function setUpBeforeClass()
 {
     require_once 'lib/Functions.php';
     require_once 'lib/DB.php';
     error_reporting(E_ALL & ~E_NOTICE);
     if (!defined('ELEFANT_ENV')) {
         define('ELEFANT_ENV', 'config');
     }
     $_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'en';
     $_SERVER['REQUEST_URI'] = '/';
     global $conf, $i18n, $cache, $page, $tpl;
     // Set up the database connection to be in memory
     $conf = parse_ini_file('conf/config.php', TRUE);
     $conf['Database'] = array('master' => array('driver' => 'sqlite', 'file' => ':memory:'));
     // Initializes PDO connection automatically
     foreach (sql_split(file_get_contents('conf/install_sqlite.sql')) as $sql) {
         if (!DB::execute($sql)) {
             die('SQL failed: ' . $sql);
         }
     }
     // Create default admin and member users
     $date = gmdate('Y-m-d H:i:s');
     DB::execute("insert into `user` (id, email, password, session_id, expires, name, type, signed_up, updated, userdata) values (1, ?, ?, null, ?, 'Admin User', 'admin', ?, ?, ?)", '*****@*****.**', User::encrypt_pass('testing'), $date, $date, $date, json_encode(array()));
     DB::execute("insert into `user` (id, email, password, session_id, expires, name, type, signed_up, updated, userdata) values (2, ?, ?, null, ?, 'Joe Member', 'member', ?, ?, ?)", '*****@*****.**', User::encrypt_pass('testing'), $date, $date, $date, json_encode(array()));
     $i18n = new I18n('lang', array('negotiation_method' => 'http'));
     $page = new Page();
     self::$c = new Controller();
     $tpl = new Template('utf-8', self::$c);
     $cache = Cache::init(array());
     self::$c->template($tpl);
     self::$c->cache($cache);
     self::$c->page($page);
     self::$c->i18n($i18n);
 }
 public function index()
 {
     $v = explode(' ', VERSION);
     $menuid = intval($_REQUEST['menuid']);
     $var = $v[0];
     $upgrade_path = $this->_url . $var . '/patch/';
     $upgrade_path_str = @file_get_contents($upgrade_path);
     $allpatch = json_decode($upgrade_path_str);
     $patchlist = $patchlists = array();
     $key = -1;
     foreach ($allpatch as $k => $v) {
         if (strstr($v, 'patch_' . UPDATETIME)) {
             $key = $k;
             break;
         }
     }
     $key = $key < 0 ? '999' : $key;
     foreach ($allpatch as $k => $v) {
         if ($k >= $key) {
             $patchlist[$k]['file'] = $v;
             $time = explode('_', $v);
             $patchlist[$k]['oldtime'] = $time[1];
             $time = explode('.', $time[2]);
             $patchlist[$k]['filemtime'] = $time[0];
         }
     }
     if (!empty($_GET['do'])) {
         $cover = intval($_REQUEST['cover']);
         import("@.ORG.Http");
         import("@.ORG.Phpzip");
         foreach ($patchlist as $k => $v) {
             //远程压缩包地址
             $upgradezip_url = $upgrade_path . $v['file'];
             //保存到临时文件夹
             $upgradezip_file = TEMP_PATH . $v['file'];
             //解压路径
             $upgradezip_source_path = TEMP_PATH . basename($v['file'], ".zip");
             //备份路径
             $backupdir = TEMP_PATH . 'bakup_' . $v['oldtime'];
             dir_create($backupdir);
             //开始下载并解压
             Http::curldownload($upgradezip_url, $upgradezip_file);
             Phpzip::unZip($upgradezip_file, $upgradezip_source_path);
             //先做备份
             $backupfilelist = dir_list($upgradezip_source_path);
             foreach ((array) $backupfilelist as $k => $file) {
                 $fromfile = str_replace($upgradezip_source_path, './', $file);
                 $tofile = $backupdir . str_replace($upgradezip_source_path, '', $file);
                 if (is_dir($fromfile)) {
                     mkdir($tofile);
                 } elseif (is_file($fromfile)) {
                     copy($fromfile, $tofile);
                 }
             }
             $this->copyfileerror = 0;
             //复制并加判断是否成功
             $this->copydir($upgradezip_source_path, './', $cover);
             //如果失败,恢复当前版本
             if ($this->copyfileerror) {
                 $this->copydir($backupdir, './', $cover);
                 die(L('upgrade_error'));
             } else {
                 if (file_exists($upgradezip_source_path . '/yourphp.sql')) {
                     $sqldata = file_get_contents($upgradezip_source_path . '/yourphp.sql');
                     $sqlFormat = sql_split($sqldata, C('DB_PREFIX'));
                     foreach ((array) $sqlFormat as $sql) {
                         $sql = trim($sql);
                         if (strstr($sql, 'CREATE TABLE')) {
                             preg_match('/CREATE TABLE `([^ ]*)`/', $sql, $matches);
                             $ret = $this->excuteQuery($sql);
                             //if($ret){echo   L('CREATE_TABLE_OK').$matches[0].' <br />';}else{echo 'Error sql:'.$sql;}exit;
                         } else {
                             $ret = $this->excuteQuery($sql);
                         }
                     }
                 }
                 if (file_exists($upgradezip_source_path . '/upgrade.php')) {
                     include $upgradezip_source_path . '/upgrade.php';
                 }
                 dir_delete($upgradezip_source_path);
                 @unlink('./upgrade.php');
                 @unlink('./yourphp.sql');
                 @unlink($upgradezip_file);
             }
         }
         $this->assign('jumpUrl', U(MODULE_NAME . '/checkfile?menuid=' . $menuid));
         $this->success(L('upgrade_ok'));
         exit;
     }
     $this->assign('menuid', $menuid);
     $this->assign('var', $var);
     $this->assign('patchlist', $patchlist);
     $this->display();
 }
Exemple #22
0
 ob_flush();
 flush();
 showmessage("开始安装数据库...");
 $db = new dbmysq();
 $db->connect($dbHost, $dbUser, $dbPwd, $dbName, 'utf8');
 //获取正确的数据
 if ($DemoDb == 1 && file_exists($DbDataSql)) {
     $dbSqlFile = $DbDataSql;
     //含表结构和演示数据
 } else {
     $dbSqlFile = $DbSql;
     //含表结构和系统数据
 }
 //创建表结构和初始化系统数据
 $dbSql = file_get_contents($dbSqlFile);
 $sqlList = sql_split($dbSql);
 foreach ($sqlList as $query) {
     $query = trim($query);
     if ($query) {
         $b = @$db->query($query);
         //DROP TABLE 不提示
         if (preg_match('/CREATE\\s*TABLE\\s* `([a-zA-Z0-9_\\n]+)`/', $query, $matches)) {
             showmessage($matches[1] . "表创建", $b);
         } else {
             if (preg_match('/INSERT\\s*INTO\\s* `([a-zA-Z0-9_\\n]+)`/', $query, $matches)) {
                 showmessage("初始化" . $matches[1] . "表数据", $b);
             }
         }
     }
 }
 showmessage("安装数据完成!");
 /**
  * 创建数据
  * @return
  */
 public function create()
 {
     $db = $_POST['db'];
     $db = array_filter($db, 'trim');
     $db['prefix'] = $db['prefix'] == '' ? C('DEFAULT_TABLE_PREFIX') : $db['prefix'];
     // 添加'_'作为分割
     if (false === strpos($db['prefix'], '_')) {
         $_POST['db']['prefix'] = $db['prefix'] .= '_';
     }
     $this->tablePrefix = $db['prefix'];
     // 当前已执行到的sql文件位置
     $this->step = intval($_GET['step']);
     if ($this->isComplete()) {
         // 安装完成
         exit;
     }
     // 连接数据库
     $this->conn = $this->connectDb($db);
     // Mysql版本不符合
     $this->invalidMysqlVersion();
     // 选择数据库
     $this->selectDb($db['name']);
     // 得到sql文件中的sql语句
     $sql = file_get_contents(C('SYSTEM_SQL_PATH'));
     $queries = sql_split($sql, $db['prefix']);
     // 执行sql
     $this->execSql($queries);
     if ($this->isComplete()) {
         // 安装完成
         exit;
     }
     // 插入 admin 数据
     $admin = $_POST['admin'];
     $admin = array_filter($admin, 'trim');
     $this->insertRootAdmin($admin, $db['name']);
     $this->closeDb();
     // 配置写入到文件中
     $this->saveConfig($_POST);
     // 安装完成
     $this->ajaxReturn(array('step' => 999999, 'info' => '安装完成'));
 }
Exemple #24
0
function stats()
{
    $id = intval($_REQUEST['id']);
    $q = mysql_query("SELECT r_result, r_ended_timestamp, u_user, u_name FROM lab3_result RIGHT JOIN lab3_user ON r_user=u_user AND r_test={$id};");
    print "<resultset id='{$id}'>";
    sql_split($q, "r_result", "u_user");
    print "</resultset>";
}
 public function step3()
 {
     $data = session('install_config');
     if (!$data) {
         $this->error('非法访问');
     }
     $field = array('DB_TYPE', 'DB_HOST', 'DB_NAME', 'DB_USER', 'DB_PWD', 'DB_PORT', 'DB_PREFIX');
     $database = array();
     foreach ($field as $key) {
         $database[$key] = $data[$key];
     }
     $db = Db::getInstance($database);
     //sql字段替换
     $sql = file_get_contents(MODULE_PATH . 'Data/sql.sql');
     $sql = str_replace('[[DB_PREFIX]]', $data['DB_PREFIX'], $sql);
     //将sql文件解析成单条语句
     $ret = sql_split($sql);
     //创建管理员账号
     $passwordInfo = password($data['password']);
     $password = $passwordInfo['password'];
     $encrypt = $passwordInfo['encrypt'];
     $email = trim($data['email']);
     array_push($ret, "update {$data['DB_PREFIX']}admin set `username`='{$data['username']}',`password`='{$password}',`roleid`='1',`encrypt`='{$encrypt}',`email`='{$email}' where `userid`='1'");
     $tip = array();
     //执行情况统计
     //安装进度显示
     array_push($tip, array('开始安装数据库', ''));
     foreach ($ret as $value) {
         $value = trim($value);
         if (empty($value)) {
             continue;
         }
         if (substr($value, 0, 12) == 'CREATE TABLE') {
             $name = preg_replace("/^CREATE TABLE `(\\w+)`.*/is", "\\1", $value);
             $msg = "创建数据表{$name}";
             if (false !== $db->execute($value)) {
                 array_push($tip, array($msg, '成功'));
             } else {
                 array_push($tip, array($msg, '失败'));
             }
         } elseif (substr($value, 0, 11) == 'INSERT INTO') {
             $name = preg_replace("/^INSERT INTO `(\\w+)`.*/is", "\\1", $value);
             $msg = "写入数据到{$name}";
             if (false !== $db->execute($value)) {
                 array_push($tip, array($msg, '成功'));
             } else {
                 array_push($tip, array($msg, '失败'));
             }
         } else {
             $db->execute($value);
         }
     }
     //同步配置文件
     if (APP_MODE != 'sae') {
         $configFile = CONF_PATH . 'config.php';
         $data = file_get_contents($configFile);
         $data = preg_replace("/('DB_TYPE'\\s*=>\\s*)'(.*)',/Us", "\\1'{$database['DB_TYPE']}',", $data);
         $data = preg_replace("/('DB_HOST'\\s*=>\\s*)'(.*)',/Us", "\\1'{$database['DB_HOST']}',", $data);
         $data = preg_replace("/('DB_NAME'\\s*=>\\s*)'(.*)',/Us", "\\1'{$database['DB_NAME']}',", $data);
         $data = preg_replace("/('DB_USER'\\s*=>\\s*)'(.*)',/Us", "\\1'{$database['DB_USER']}',", $data);
         $data = preg_replace("/('DB_PWD'\\s*=>\\s*)'(.*)',/Us", "\\1'{$database['DB_PWD']}',", $data);
         $data = preg_replace("/('DB_PORT'\\s*=>\\s*)'(.*)',/Us", "\\1'{$database['DB_PORT']}',", $data);
         $data = preg_replace("/('DB_PREFIX'\\s*=>\\s*)'(.*)',/Us", "\\1'{$database['DB_PREFIX']}',", $data);
         $data = preg_replace("/('report'\\s*=>\\s*)'(.*)',/Us", "\\1'{$email}',", $data);
         file_put_contents($configFile, $data);
         array_push($tip, array('写入配置文件', '成功'));
     }
     session('install_step', 4);
     array_push($tip, array('安装完成', ''));
     $this->assign('tip', $tip);
     $this->display();
 }
Exemple #26
0
$this->require_admin();
if (!isset($_GET['extends'])) {
    echo $this->error(500, __('Unknown error'));
    return;
}
if (!class_exists($_GET['extends'])) {
    echo $this->error(500, __('Unknown error'));
    return;
}
if (!isset($_GET['name'])) {
    $_GET['name'] = $_GET['extends'];
}
// Create the database table if it doesn't exist
if (!DB::single('select count(*) from #prefix#extended_fields')) {
    $db = DB::get_connection(true);
    $queries = sql_split(file_get_contents(sprintf('apps/admin/conf/update/extended_fields_%s.sql', $db->getAttribute(PDO::ATTR_DRIVER_NAME))));
    foreach ($queries as $query) {
        DB::execute($query);
    }
}
$page->layout = 'admin';
$page->title = __('Custom Fields') . ': ' . __($_GET['name']);
$page->add_script('/apps/admin/js/handlebars-1.0.rc.1.js');
$page->add_script('/js/jquery-ui/jquery-ui.min.js');
$page->add_script('/apps/admin/js/extended.js');
$data = array('extends' => $_GET['extends']);
$data['fields'] = ExtendedFields::for_class($_GET['extends']);
if (!is_array($data['fields'])) {
    $data['fields'] = array();
}
$res = glob('apps/*/conf/fields.php');
Exemple #27
0
$page->layout = 'admin';
$cur = $this->installed('polls', $appconf['Admin']['version']);
if ($cur === true) {
    $page->title = 'Already installed';
    echo '<p><a href="/polls/admin">Continue</a></p>';
    return;
} elseif ($cur !== false) {
    header('Location: /' . $appconf['Admin']['upgrade']);
    exit;
}
$page->title = 'Installing App: Polls';
$conn = conf('Database', 'master');
$driver = $conn['driver'];
DB::beginTransaction();
$error = false;
$sqldata = sql_split(file_get_contents('apps/polls/conf/install_' . $driver . '.sql'));
foreach ($sqldata as $sql) {
    if (!DB::execute($sql)) {
        $error = DB::error();
        break;
    }
}
if ($error) {
    DB::rollback();
    @error_log('Error: polls/install - ' . $error);
    echo '<p>Install failed.</p>';
    return;
}
DB::commit();
echo '<p><a href="/polls/admin">Done.</a></p>';
$this->mark_installed('polls', $appconf['Admin']['version']);
$query = null;
if (isset($_POST['editor'])) {
    include_once 'DB.php';
    /*$host = "localhost";
    		$user_name = "root";
    		$user_pwd = "root";
    		$db= "test";
    		$con = new MySQLi($host,$user_name,$user_pwd);*/
    $db = Database::getInstance();
    $con = $db->getConnection();
    $con->select_db('test');
    $query1 = $_POST['editor'];
    if (substr($query1, -1) !== ';') {
        $query1 .= ";";
    }
    $query1 = sql_split(htmlspecialchars_decode($query1));
    $query_count = 0;
    if ($con->errno) {
        echo "Connection Error";
    } else {
        if (1) {
            $query = htmlspecialchars_decode($_POST['editor']);
            // single Query
            while ($query_count != count($query1)) {
                $current_query = trim(strtolower($query1[$query_count]));
                $match = 0;
                //switch($current_query) {
                if (strpos($current_query, "create") >= $match) {
                    $temp = substr($current_query, 0, 6);
                    if ($temp === "create") {
                        single_query("create", $current_query);