2010-07-31 73 views
1

我發現瞭如何發現如果數據庫使用此代碼存在:安裝腳本 - 如何檢查數據庫表是否已經存在?

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,所以沒用。基本上,如果我安裝後再次運行這個安裝腳本,它會給我一個錯誤,說明表「活動客戶」已經存在。 (它的第一個表創建,所以它總是這一個顯示。)

我想添加一個表的檢查告訴腳本:表已經存在,所以不要修改它們,只是創建數據庫.php文件而不接觸數據庫。

回答

1

你可以只修改你的SQL:

CREATE TABLE IF NOT EXISTS `tablename` 

Reference MySQL docs here

+0

我可以在插入數據的地方使用它嗎? 編輯:我發現INSERT IGNORE INTO查詢,應該工作! – blackjak231 2010-07-31 15:14:50

1

您可以使用show tables SQL查詢來檢查現有表:

$result = mysql_query("show tables like '$tablename'"); 
相關問題