代码之家  ›  专栏  ›  技术社区  ›  blackjak231

安装脚本-如何检查数据库表是否已经存在?

  •  1
  • blackjak231  · 技术社区  · 14 年前

    if(mysql_select_db('db-name'))
    return true;
    

    但是我想检查数据库里的表。代码如下:

    error_reporting(0);
    session_start();
    
    global $_ERROR;
    
    $_ERROR = array();
    $installed = false;
    
    if($_POST)
    {
        $num = 0;
        foreach($_POST as $key=>$value)
        {
            if(strlen(str_replace(" ","",$value))<=0 && $key!='db_pass')
            {
                $_ERROR[$key] = 'class="error"';
                $num ++;
            }
        }
        if($num>0)
        {
            $_ERROR['text'] = 'Please fill in all fields';
        }
        else
        {
            // Create Database
            $con = mysql_connect($_POST['db_server'],$_POST['db_user'],$_POST['db_pass']);
            if (!$con) {
                $_ERROR['text'] = 'There was an error connecting to your database';
            }
            else
            {
                if(mysql_select_db($_POST['db_name'])){
    
                }
                $db = mysql_select_db($_POST['db_name'],$con);
                if(!$db)
                {
                    $_ERROR['text'] = 'Could not select database';
                }
                else
                {
    
                    foreach($_POST as $key=>$value)
                    {
                        $_POST[$key] = mysql_real_escape_string($value,$con);
                    }
    
                    $sql = 'SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
                            CREATE TABLE `active_guests` (
                            `ip` varchar(15) collate latin1_general_ci NOT NULL,
                            `timestamp` int(11) unsigned NOT NULL,
                            PRIMARY KEY  (`ip`)
                            );';
                    mysql_query($sql,$con) or die(mysql_error());
                    $sql = 'CREATE TABLE `active_users` (
                            `username` varchar(30) collate latin1_general_ci NOT NULL,
                            `timestamp` int(11) unsigned NOT NULL,
                             PRIMARY KEY  (`username`)
                            );';
                    mysql_query($sql,$con) or die(mysql_error());
                    $sql = 'CREATE TABLE `banned_users` (
                            `username` varchar(30) collate latin1_general_ci NOT NULL,
                            `timestamp` int(11) unsigned NOT NULL,
                            PRIMARY KEY  (`username`)
                            );';
                    mysql_query($sql,$con) or die(mysql_error());
                    $sql = "CREATE TABLE `forum` (
                            `postid` bigint(20) NOT NULL auto_increment,
                            `author` varchar(255) collate latin1_general_ci NOT NULL default '',
                            `title` varchar(255) collate latin1_general_ci NOT NULL default '',
                            `post` mediumtext collate latin1_general_ci NOT NULL,
                            `showtime` varchar(255) collate latin1_general_ci NOT NULL default '',
                            `realtime` bigint(20) NOT NULL default '0',
                            `lastposter` varchar(255) collate latin1_general_ci NOT NULL default '',
                            `numreplies` bigint(20) NOT NULL default '0',
                            `parentid` bigint(20) NOT NULL default '0',
                            `lastrepliedto` bigint(20) NOT NULL default '0',
                            `author_avatar` varchar(30) collate latin1_general_ci NOT NULL default 'default',
                            `type` varchar(2) collate latin1_general_ci NOT NULL default '1',
                            `stick` varchar(6) collate latin1_general_ci NOT NULL default '0',
                            `numtopics` bigint(20) NOT NULL default '0',
                            `cat` bigint(20) NOT NULL,
                            PRIMARY KEY  (`postid`)
                            );";
                    mysql_query($sql,$con) or die(mysql_error());
                    $sql = "CREATE TABLE `messages` (
                            `id` int(11) NOT NULL auto_increment,
                            `reciever` varchar(25) NOT NULL default '',
                            `sender` varchar(25) NOT NULL default '',
                            `subject` text NOT NULL,
                            `message` longtext NOT NULL,
                            `recieved` enum('1','0') default '0',
                            PRIMARY KEY  (`id`)
                            );";
                    mysql_query($sql,$con) or die(mysql_error());           
                    $sql = "CREATE TABLE `news` (
                            `id` int(11) NOT NULL auto_increment,
                            `titre` varchar(255) collate latin1_general_ci NOT NULL,
                            `contenu` text collate latin1_general_ci NOT NULL,
                            `timestamp` bigint(20) NOT NULL default '0',
                            PRIMARY KEY  (`id`)
                            );";
                    mysql_query($sql,$con) or die(mysql_error());   
                    $sql = "CREATE TABLE `settings` (
                            `id` int(11) NOT NULL auto_increment,
                            `name` varchar(25) NOT NULL default '',
                            `value` varchar(20) NOT NULL,
                            PRIMARY KEY  (`id`)
                            );";
                    mysql_query($sql,$con) or die(mysql_error());
                    $sql = "CREATE TABLE `users` (
                            `username` varchar(30) collate latin1_general_ci NOT NULL,
                            `password` varchar(32) collate latin1_general_ci default NULL,
                            `userid` varchar(32) collate latin1_general_ci default NULL,
                            `userlevel` tinyint(1) unsigned NOT NULL,
                            `email` varchar(50) collate latin1_general_ci default NULL,
                            `timestamp` int(11) unsigned NOT NULL,
                            `web` varchar(90) collate latin1_general_ci default 'Sorry, i dont have a website.',
                            `country` varchar(90) collate latin1_general_ci NOT NULL,
                            `avatar` varchar(30) collate latin1_general_ci NOT NULL default 'default',
                            `status` varchar(50) collate latin1_general_ci NOT NULL,
                            `pm_count` int(11) NOT NULL default '0',
                            `statusmessage` mediumtext COLLATE latin1_general_ci NOT NULL,
                            PRIMARY KEY (`username`)
                            );";        
                    mysql_query($sql,$con) or die(mysql_error());
                    $pass = md5($_POST['password']);
                    $sql = "INSERT INTO `users` VALUES ('$_POST[name]', '$pass', '0', '9', '$_POST[email]', '', '', '', 'default', '', '0', 'Hello world!')";
                    mysql_query($sql,$con) or die(mysql_error());
                    $sql = "INSERT INTO `settings` VALUES (1, 'update', '0')";
                    mysql_query($sql,$con) or die(mysql_error());
                    $sql = "INSERT INTO `settings` VALUES (2, 'title', '$_POST[sitename]')";
                    mysql_query($sql,$con) or die(mysql_error());
                    $sql = "INSERT INTO `settings` VALUES (3, 'frontnews', '0')";
                    mysql_query($sql,$con) or die(mysql_error());
                    $sql = "INSERT INTO `settings` VALUES (4, 'headercolor', '#7387a7')";
                    mysql_query($sql,$con) or die(mysql_error());
                    $sql = "INSERT INTO `settings` VALUES (5, 'numpms', '50')";
                    mysql_query($sql,$con) or die(mysql_error());
    
    
                    $file = fopen("db.php","r");
                    $data = fread($file, 500000);
                    fclose($file);
    
                    $data = str_replace('define("INSTALLED",FALSE);','define("INSTALLED",TRUE);',$data);
                    $data = str_replace('HOST',$_POST['db_server'],$data);
                    $data = str_replace('USER_',$_POST['db_user'],$data);
                    $data = str_replace('PASSWORD',$_POST['db_pass'],$data);
                    $data = str_replace('DBNAME',$_POST['db_name'],$data);
                    $data = str_replace('EMAIL_NAME',$_POST['email_name'],$data);
                    $data = str_replace('_EMAIL',$_POST['email'],$data);
    
                    $file = fopen("db.php","w");
                    fwrite($file, $data, 500000);
                    fclose($file);
    
                    header("Location: ../index.php");
                }
            }
        }
    }
    
    $_POST['siteurl'] = str_replace("/includes/install.php","","http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
    
    ?>
    

    其余的是html,所以没有用。基本上,如果我在安装之后再次运行这个安装脚本,它会给我一个错误,说明表“activeguest”已经存在(它是创建的第一个表,所以总是显示这个表。)

    我试图添加一个表检查来告诉脚本:表已经存在,所以不要修改它们,只需创建db.php文件而不触及数据库。

    2 回复  |  直到 7 年前
        1
  •  1
  •   AvatarKava    14 年前

    您只需修改SQL:

    CREATE TABLE IF NOT EXISTS `tablename`
    

    Reference MySQL docs here .

        2
  •  1
  •   Māris Kiseļovs    14 年前

    你可以用 show tables

    $result = mysql_query("show tables like '$tablename'");