使用 CI 简化数据库开发

学习CI 是因为你想要使编程更容易和更有生产力。这一章讲述CI的Active Record类。 如果CI只提供一个Active Record类,它还是物超所值的。当然,CI是免费的,只不过我要强调Active Record(以后简称AR)类的价值是非常高的,它是你提高生产力的主要工具


AR使你以最小的代价获得最大的回报。 它简单,易于使用和维护。

这一章描述CI如何连接到一个数据库,你如何使用AR操纵数据库。你将会见到:

。 AR类与传统PHP/MySQL接口的比较

。 如何读取数据库并显示结果

。 如何创建,更新, 删除查询

CI保留让你用传统的方法编写数据库查询,但是我不会详细介绍这部分内容。它的知识完全被在线手册覆盖。使用AR类后,你可能不会再用传统的方式来做数据库查询了。

配置config文件

你或许已经注意到在这本书的大多数的章节会谈到system/application/config 文件夹和里面的config文件。这些文件对控制CI按要求工作相当必要。而且你可以让大部分的配置参数等于系统的默认值。数据库config文件在正常使用数据库之前需要进行设置。

基本上,你仅仅必须告诉它你的数据库在哪里、它是什么类型。 文件的默认值为:

$active_group="default";
$db['default']['hostname']="";
$db['default']['username']="";
$db['default']['password']="";
$db['default']['database']="";
$db['default']['dbdriver']="";

其他的选项可以保留为默认值。 必选项是:

hostname: 你的数据库的位置, 举例来说, 'localhost' 或 IP 地址

username和password: 使用者名称和密码必须有充分的权限,允许你的网站存取数据库中的数据。

database: 你的数据库的名字, 举例来说, 'websits'

dbdriver: 你正在使用的数据库的类型 - CI可受的有选项有MySQL、MySQLi、 Postgre SQL、ODBC和MS SQL

以我的经验来看, 最困难的事情之一就是把新的CI网站连接到数据库。你可能需要查询你的ISP-有时他们的数据库运行在与他们的web server IP地址不同的地方。如果你正在使用 MySQL, 他们可能提供 phpMyAdmin, 通常告诉你 hostname-这可能是 'localhost' 或者它可能是一个 IP 住址。

你可能注意到 config 文件的内容实际上是一个多维数组。在 $db数组里包含一个叫做default的数组,你所做的设置就是往里增加键/值对,例如 hostname = 127.0.0.1 。你还可以增加其他的数据库设置, 通过改变$active_group的设置可以容易地更改数据据库。

这为网站连接到数个数据库提供了可能性-举例来说, 一个测试数据库和一个产品数据库-你可以很容易地在他们之间切换。 或者你可以在二个数据库之间交换数据。

为我们的网站设计数据库

我想表达的是 CI 能用来开发正式的网站。 我现在正在维护客户的一些网站,而且我想要监控他们,用我设计的方法测试它们, 用数据库保存我想要的数据, 而且可以得到这些网站的分析报告。 因此让我们试着创建它。 先让我们确定一些目标。 它们是:

1. 用最少的人工干预管理一个或更多的远程网站

2. 对远程网站进行定期的测试

3. 生成符合要求的分析报告, 提供网站的细节和测试结果

因此, 第一件事情是我们将会需要一个网站的数据库。 建立一个名为websites的MySQL数据库,你也可以使用别的数据库产品。

现在,我们需要增加一些表来保存各种数据。让我们为网站增加一张表,字段有URL,他们的名字和密码/用户名, 和他们的类型。我们也将会为每个网站建立一个ID字段-而且在 MySQL数据库中,至少,需要为实体生成一个唯一标识符,可以使用自动增量类型来达到这一目的。

每个网站必须有一个不同的主机,我们需要另一表来保存主机信息。一般有一个域名与主机相关联,所以我们需要一个域名表来保存有关域名的信息,还需要一个人员表来记录这些人的姓名,密码,邮件地址,备用邮件地址,手机号码,曾至宠物的名字,可能还有其它的一些什么。

因此我们的网站表需要包括这样一些字段:domain ID, host ID, 两个people ID,一个存放网站站长的ID一个存放网站管理人的ID(管理人为网站提供技术支持,保证网站正常运行.)

你能见到,这是一个完整的关系型数据库,让我们来建立它!

完整的建表文档,SQL文件格式:

websites.sql:

SQL
DROP TABLE IF EXISTS `ci_sessions`;
CREATE TABLE IF NOT EXISTS `ci_sessions` (
  `session_id` varchar(40) NOT NULL default '0',
  `peopleid` int(11) NOT NULL,
  `ip_address` varchar(16) NOT NULL default '0',
  `user_agent` varchar(50) NOT NULL,
  `last_activity` int(10) unsigned NOT NULL default '0',
  `left` int(11) NOT NULL,
  `name` varchar(25) NOT NULL,
  `status` tinyint(4) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `domains`;
CREATE TABLE IF NOT EXISTS `domains` (
  `id` int(10) NOT NULL auto_increment,
  `url` varchar(100) NOT NULL,
  `name` varchar(100) NOT NULL,
  `registrar` varchar(100) NOT NULL,
  `dateregd` int(11) NOT NULL default '0',
  `cost` float NOT NULL default '0',
  `regdfor` int(11) NOT NULL default '0',
  `notes` blob NOT NULL,
  `pw` varchar(25) NOT NULL,
  `un` varchar(25) NOT NULL,
  `lastupdate` int(11) NOT NULL default '0',
  `submit` varchar(25) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;
DROP TABLE IF EXISTS `events`;
CREATE TABLE IF NOT EXISTS `events` (
  `id` int(10) NOT NULL auto_increment,
  `name` varchar(50) NOT NULL default 'not set',
  `type` enum('test','alert','report') NOT NULL,
  `testid` int(10) NOT NULL,
  `siteid` int(10) NOT NULL,
  `userid` int(10) NOT NULL,
  `reported` int(11) NOT NULL,
  `result` blob NOT NULL,
  `time` int(11) NOT NULL,
  `timetaken` float NOT NULL,
  `isalert` varchar(2) NOT NULL,
  `emailid` int(11) NOT NULL,
  `submit` varchar(25) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=69 ;
DROP TABLE IF EXISTS `frequencies`;
CREATE TABLE IF NOT EXISTS `frequencies` (
  `id` int(10) NOT NULL,
  `name` varchar(16) NOT NULL,
  `submit` varchar(25) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `hosts`;
CREATE TABLE IF NOT EXISTS `hosts` (
  `id` int(11) NOT NULL auto_increment,
  `cost` float NOT NULL,
  `name` varchar(100) NOT NULL,
  `hosturl` varchar(100) NOT NULL,
  `un` varchar(50) NOT NULL,
  `pw` varchar(50) NOT NULL,
  `ns1url` varchar(36) NOT NULL,
  `ns1ip` varchar(36) NOT NULL,
  `ns2url` varchar(36) NOT NULL,
  `ns2ip` varchar(36) NOT NULL,
  `ftpurl` varchar(100) NOT NULL,
  `ftpserverip` varchar(36) NOT NULL,
  `ftpun` varchar(50) NOT NULL,
  `ftppw` varchar(50) NOT NULL,
  `cpurl` varchar(36) NOT NULL,
  `cpun` varchar(36) NOT NULL,
  `cppw` varchar(36) NOT NULL,
  `pop3server` varchar(36) NOT NULL,
  `servicetel` varchar(50) NOT NULL,
  `servicetel2` varchar(50) NOT NULL,
  `serviceemail` varchar(100) NOT NULL,
  `webroot` varchar(48) NOT NULL,
  `absoluteroot` varchar(48) NOT NULL,
  `cgiroot` varchar(48) NOT NULL,
  `booked` int(11) NOT NULL,
  `duration` int(11) NOT NULL,
  `lastupdate` int(11) NOT NULL default '0',
  `submit` varchar(25) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
DROP TABLE IF EXISTS `people`;
CREATE TABLE IF NOT EXISTS `people` (
  `id` int(11) NOT NULL auto_increment,
  `uname` varchar(25) NOT NULL,
  `pw` varchar(25) NOT NULL,
  `status` smallint(3) NOT NULL default '1',
  `name` varchar(50) NOT NULL,
  `firstname` varchar(50) NOT NULL,
  `surname` varchar(50) NOT NULL,
  `email` varchar(120) NOT NULL,
  `lastupdate` int(11) NOT NULL default '0',
  `submit` varchar(25) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
DROP TABLE IF EXISTS `sites`;
CREATE TABLE IF NOT EXISTS `sites` (
  `id` int(10) NOT NULL auto_increment,
  `name` varchar(100) NOT NULL,
  `url` varchar(100) NOT NULL,
  `un` varchar(50) NOT NULL,
  `pw` varchar(50) NOT NULL,
  `client1` int(10) NOT NULL default '0',
  `client2` int(10) NOT NULL default '0',
  `admin1` int(10) NOT NULL default '0',
  `admin2` int(10) NOT NULL default '0',
  `domainid` int(10) NOT NULL default '0',
  `hostid` int(10) NOT NULL default '0',
  `webroot` varchar(50) NOT NULL,
  `files` text NOT NULL,
  `filesdate` int(11) NOT NULL default '0',
  `lastupdate` int(11) NOT NULL default '0',
  `submit` varchar(25) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;
DROP TABLE IF EXISTS `tests`;
CREATE TABLE IF NOT EXISTS `tests` (
  `id` int(11) NOT NULL auto_increment,
  `siteid` int(11) NOT NULL default '0',
  `name` varchar(250) NOT NULL,
  `type` varchar(25) NOT NULL,
  `url` varchar(120) NOT NULL,
  `regex` varchar(250) NOT NULL,
  `p1` varchar(250) NOT NULL,
  `p2` varchar(250) NOT NULL,
  `p3` varchar(250) NOT NULL,
  `p4` varchar(250) NOT NULL,
  `p5` varchar(250) NOT NULL,
  `p6` varchar(250) NOT NULL,
  `frequency` int(10) NOT NULL default '0',
  `lastdone` int(10) NOT NULL default '0',
  `isalert` varchar(2) NOT NULL,
  `setup` int(10) NOT NULL default '0',
  `lastupdate` int(10) NOT NULL default '0',
  `notes` varchar(250) NOT NULL,
  `submit` varchar(25) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
DROP TABLE IF EXISTS `types`;
CREATE TABLE IF NOT EXISTS `types` (
  `id` varchar(7) NOT NULL,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
复制代码

相关文章:

  • 2021-06-15
  • 2021-04-16
  • 2021-08-21
  • 2021-06-17
  • 2022-12-23
  • 2022-12-23
  • 2021-07-14
  • 2021-10-02
猜你喜欢
  • 2022-02-08
  • 2022-02-24
  • 2022-12-23
  • 2021-09-07
  • 2021-11-13
  • 2021-05-30
  • 2021-10-13
相关资源
相似解决方案