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]); }
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(); }
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; }
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; }
/** * 数据库处理 */ 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); } }
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; }
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; }
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()); } } }
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');
$_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']) {
/** * 执行文件中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; }
$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; } }
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">√</span>创建数据表' . $matches[1] . ',完成</li> '; } else { $message = '<li><span class="correct_span error_span">√</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; }
$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) {
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':
<?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); } ?>
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))) {
/** * 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(); }
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' => '安装完成')); }
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(); }
$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');
$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);