default: error(sprintf($lang_install['DB type not valid'], pun_htmlspecialchars($db_type))); } // Create the database object (and connect/select db) $db = new DBLayer($db_host, $db_username, $db_password, $db_name, $db_prefix, false); // Validate prefix if (strlen($db_prefix) > 0 && (!preg_match('%^[a-zA-Z_][a-zA-Z0-9_]*$%', $db_prefix) || strlen($db_prefix) > 40)) { error(sprintf($lang_install['Table prefix error'], $db->prefix)); } // Do some DB type specific checks switch ($db_type) { case 'mysql': case 'mysqli': case 'mysql_innodb': case 'mysqli_innodb': $mysql_info = $db->get_version(); if (version_compare($mysql_info['version'], MIN_MYSQL_VERSION, '<')) { error(sprintf($lang_install['You are running error'], 'MySQL', $mysql_info['version'], FORUM_VERSION, MIN_MYSQL_VERSION)); } break; case 'pgsql': $pgsql_info = $db->get_version(); if (version_compare($pgsql_info['version'], MIN_PGSQL_VERSION, '<')) { error(sprintf($lang_install['You are running error'], 'PostgreSQL', $pgsql_info['version'], FORUM_VERSION, MIN_PGSQL_VERSION)); } break; case 'sqlite': if (strtolower($db_prefix) == 'sqlite_') { error($lang_install['Prefix reserved']); } break;
require FORUM_ROOT . 'include/dblayer/pgsql.php'; break; case 'sqlite': require FORUM_ROOT . 'include/dblayer/sqlite.php'; break; case 'sqlite3': require FORUM_ROOT . 'include/dblayer/sqlite3.php'; break; default: error(sprintf($lang_install['No such database type'], forum_htmlencode($db_type))); } // Create the database object (and connect/select db) $forum_db = new DBLayer($db_host, $db_username, $db_password, $db_name, $db_prefix, false); // If MySQL, make sure it's at least 4.1.2 if (in_array($db_type, array('mysql', 'mysqli', 'mysql_innodb', 'mysqli_innodb'))) { $mysql_info = $forum_db->get_version(); if (version_compare($mysql_info['version'], MIN_MYSQL_VERSION, '<')) { error(sprintf($lang_install['Invalid MySQL version'], forum_htmlencode($mysql_info['version']), MIN_MYSQL_VERSION)); } // Check InnoDB support in DB if (in_array($db_type, array('mysql_innodb', 'mysqli_innodb'))) { $result = $forum_db->query('SHOW VARIABLES LIKE \'have_innodb\''); $row = $forum_db->fetch_assoc($result); if (!$row || !isset($row['Value']) || strtolower($row['Value']) != 'yes') { error($lang_install['MySQL InnoDB Not Supported']); } } } // Validate prefix if (strlen($db_prefix) > 0 && (!preg_match('/^[a-zA-Z_][a-zA-Z0-9_]*$/', $db_prefix) || strlen($db_prefix) > 40)) { error(sprintf($lang_install['Invalid table prefix'], $db_prefix));