示例#1
0
/**
 * @param $api
 * @param $driver
 * @param $host
 * @param $user
 * @param $pass
 * @param $dbname
 * @param $client_charset
 * @param $dbTiki
 * @return bool|int
 */
function initTikiDB(&$api, &$driver, $host, $user, $pass, $dbname, $client_charset, &$dbTiki)
{
    $initializer = new TikiDb_Initializer();
    $initializer->setPreferredConnector($api_tiki);
    $initializer->setInitializeCallback(function ($db) {
        $db->setServerType($db_tiki);
        $db->setErrorHandler(new InstallerDatabaseErrorHandler());
    });
    global $tikifeedback;
    $dbcon = false;
    try {
        $dbTiki = $initializer->getConnection(array('host' => $host, 'user' => $user, 'pass' => $pass, 'dbs' => $dbname, 'charset' => $client_charset));
        $dbcon = !empty($dbTiki);
    } catch (Exception $e) {
        $tikifeedback[] = array('num' => 1, 'mes' => $e->getMessage());
    }
    // Attempt to create database. This might work if the $user has create database permissions.
    // First check that suggested database name will not cause issues
    $dbname_clean = preg_replace('/[^a-z0-9$_-]/', "", $dbname);
    if ($dbname_clean != $dbname) {
        $tikifeedback[] = array('num' => 1, 'mes' => tra("Some invalid characters were detected in database name. Please use alphanumeric characters or _ or -.", '', false, array($dbname_clean)));
        $attempt_creation = false;
    } else {
        $attempt_creation = true;
    }
    if (!$dbcon && $attempt_creation == true) {
        $sql = "CREATE DATABASE IF NOT EXISTS `{$dbname_clean}` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;";
        $dbTiki->query($sql, $error);
        if (empty($error)) {
            $tikifeedback[] = array('num' => 1, 'mes' => tra("Database `%0` was created.", '', false, array($dbname_clean)));
        } else {
            $tikifeedback[] = array('num' => 1, 'mes' => tra("Database `%0` creation failed. You need to create the database.", '', false, array($dbname_clean)));
        }
        try {
            $dbTiki = $initializer->getConnection(array('host' => $host, 'user' => $user, 'pass' => $pass, 'dbs' => $dbname, 'charset' => $client_charset));
            $dbcon = !empty($dbTiki);
        } catch (Exception $e) {
            $tikifeedback[] = array('num' => 1, 'mes' => $e->getMessage());
        }
    }
    TikiDb::set($dbTiki);
    return $dbcon;
}
示例#2
0
     */
    function log($msg)
    {
        global $user, $tikilib;
        $query = 'insert into `tiki_actionlog` (`objectType`,`action`,`object`,`user`,`ip`,`lastModif`, `comment`, `client`) values (?,?,?,?,?,?,?,?)';
        $result = $tikilib->query($query, array('system', 'db error', 'system', $user, $tikilib->get_ip_address(), $tikilib->now, $msg, substr($_SERVER['HTTP_USER_AGENT'], 0, 200)));
    }
}
$initializer = new TikiDb_Initializer();
$initializer->setPreferredConnector($api_tiki);
$initializer->setInitializeCallback(function ($db) {
    global $db_table_prefix, $common_users_table_prefix, $db_tiki;
    $db->setServerType($db_tiki);
    $db->setErrorHandler(new TikiDb_LegacyErrorHandler());
    if (isset($db_table_prefix)) {
        $db->setTablePrefix($db_table_prefix);
    }
    if (isset($common_users_table_prefix)) {
        $db->setUsersTablePrefix($common_users_table_prefix);
    }
});
try {
    $db = $initializer->getConnection($credentials['primary']);
} catch (Exception $e) {
    echo $e;
    require_once 'lib/init/smarty.php';
    $smarty->assign('msg', $e->getMessage());
    $smarty->assign('where', 'connection');
    echo $smarty->fetch('database-connection-error.tpl');
    exit;
}