Mar
21

如何写PHP网站install程序(二)

如果是在虚拟主机或者一个全新的服务器上安装软件,那么人家是不会帮你将数据库建好的。所以我们的install.php必须能够自动建立数据库。

一般,我们建立mysql数据库都是用phpmyadmin程序来建立的,但是我们不知道要安装的服务器上是否有phpmyadmin程序。怎么办?
你会说,用mysql客户端,链接服务器,然后建立,但是服务器上的mysql数据为了安全,一般也不开放从外部链接的权限,怎么办?

呵呵,我们在上一篇中已经得到了数据库的用户名,密码,地址,和管理员给我们的数据库名称了,我们可以利用这些资料,让install程序帮我们完成建立数据库。

接上一篇,install.php已经post过来了数据库的用户名,密码,地址。我们就可以链接mysql数据库了。

$conn = @mysql_connect($mysql_add,$mysql_user,$mysql_pass) or die("无法链接数据库: " . mysql_error());
if(@mysql_query("CREATE DATABASE ".$mysql_dbname." DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci")) {
echo "数据库:".$mysql_dbname." 建立 …… 成功<br>";
$state = 1; //这里为$state赋值一个变量1
}else{
echo "数据库:".$mysql_dbname." 建立 …… 失败(可能该数据库已经存在或无法链结数据库)<br>";
exit();
}

这段程序就是尝试用mysql_connect()函数来,链接数据库,如果链接成功,没有die掉的话,就直接运行mysql_query(sql语句)建立数据库;i138原创文章,由于比较粗糙,不能登大雅之堂,禁止转载
显然,如果建立链接成功,且建立数据库成功,我们就可以继续建立数据表了。
为了程序显得比较容易读懂,我建立了一个函数,负责建立数据表。

/*
创建数据表和数据函数.
*/
function CreateTable{
  $sql=array();
  $sql[] = "DROP TABLE IF EXISTS `user`;";
  $sql[] = "CREATE TABLE IF NOT EXISTS `user` (
 `Id` int(11) unsigned NOT NULL auto_increment,
 `UserID` varchar(10) default NULL,
 `Password` varchar(32) default NULL,
 `UserNameCN` varchar(100) default NULL,
 `CPNameCN` varchar(100) default NULL,
 `question` int(1) default NULL,
 `answer` varchar(250) default NULL,
 `joindate` date default NULL,
 `telphone` varchar(20) default NULL,
 `fax` varchar(20) default NULL,
 `email` varchar(50) default NULL,
 PRIMARY KEY  (`Id`),
 UNIQUE KEY `userID` (`UserID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8";
 $sql[]="INSERT INTO `user` VALUES (1,'admin','admin888','管理员','测试公司','密码提示问题','密码提示答案',now(),'0768-8888888','0768-6666666','i138@msn.com'),(2,'user','user','用户','测试公司','电脑品牌','HP',now(),'','','chaozhouren@msn.com');";
 //这里基本都是建立数据表格和数据的sql语句,每一句赋值给$sql数组就可以了。
 
 foreach($sql as $key => $val) {
    if(!mysql_query($val)) {
     die("导入数据失败:<br>query:<br>".$val);
   }
 }
 Return true;  
}

如果$sql数组的数据量比较大,这里最好是用foreache($sql as $key => $val)函数,别用while(list($key,$val)=each($sql))函数,因为while的执行效率和时间远远低于foreach函数。i138原创文章,由于比较粗糙,不能登大雅之堂,禁止转载

好,函数构建好,就该在执行了。且慢,且慢,上面第一个代码段只是建立了数据库,如果这时就建立数据表,那么程序肯定会报错。为什么?因为我们只是建立了数据库,但是没有选择这个库啊,mysql数据库是不知道你要在那里建立数据表,不报错才怪。
链接数据库:

if($stale==1){
   @mysql_select_db($mysql_dbname) or die("无法链接数据库:".$mysql_dbname);
   if(CreateTable()){
      echo "数据表建立成功!";
      $state =2; //给$state赋值,状态2
   }
}


至此,我们的install程序已经初具雏形了。待续……
i138原创文章,由于比较粗糙,不能登大雅之堂,禁止转载