CodeIgniter URL:
www.111com.net /class/function/ID
1、第一段表示调用控制器类。
2、第二段表示调用类中的函数或方法。 (如果你的类文件保存在子目录中,那么第二段包含了两个小段:子目录/类函数)
3、第三及更多的段表示的是传递给控制器的参数,如 ID 或其他各种变量。
(这里的第一、第二、第三段指的是网址中除域名和index.php之外由斜杠“/”分隔的段)
通过设置 application/config/config.php 文件$config['url_suffix']这个参数,你可以为 CodeIgniter 生成的 URL 添加一个指定的文件后缀。
比如:www.111com.net /index.php/products/view/shoes
你可以随意添加一个后缀,例如 .html,使其显示为:
www.111com.net /index.php/products/view/shoes.html
可以通过设置 application/config/config.php 文件$config['enable_query_strings']参数值为“true”来启用URL中的查询字符串(形 如:index.php?c=products&m=view&id=345),请注意:如果你使用查询字符串,那么就必须使用自己建立 的 URL ,而且不能使用URL 辅助函数(或是其他生成 URL 的辅助函数,例如表单辅助函数),因为这些都是根据分段 URL 设计的。
URL route路由规则自定义:
1、路由规则文件位置:application/config/routes.php =》$route数组
2、路由规则(通配符规则和正则表达式规则):
一个典型的通配符路由看起来是这样的:
$route['product/:num'] = “catalog/product_lookup”;//数组的键包含着被匹配的URI,而数组的值包含着路由将被重定向的目的地.
路由数组的键可以匹配文字的值或者使用以下两种通配符类型:
:num 将匹配一个只包含有数字的段.
:any 将匹配一个包含任何字符的段.
也可以使用正则表达式:例如:$route[‘products/([a-z]+)/(\d+)’] = “$1/id_$2″;
可以混合使用通配符与正则表达式.
3、需要被保留的路由:$route['default_controller'] 和 $route['scaffolding_trigger']
控制器类(Controller)
新建控制器:
1、控制器类文件保存位置:application/controllers/
2、控制器类文件的文件名:用控制器类名的全小写格式作文件名,以.php作扩展名
3、控制器类声明格式:㈠必须是Controller类的子类;㈡类名的首字母必须大写。
比如声明blog控制器类,其声明格式形如:
class Blog extends Controller {
function __construct(){
parent::Controller();
}
}
4、控制类中方法的声明:函数名如果以下划线“_”开头,则此函数为私有方法(私有方法不能通过网址访问)。
将私有方法名设为_remap:
该方法会废除掉由 URI 片段来决定哪个方法被调用的规则,允许你重新定义调用方法的规则(方法的路由规则)。
将私有方法名设为_output:
该方法会接收其控制器类的所有输出数据(显示数据),以便由你控制处理和输出。这个方法类似于OO里的析构函数,不管你调用任何方法这个方法总是会被执行。
5、系统的保留类名:Controller CI_Base CI_Loader
6、系统的保留方法名:
_ci_initialize
_ci_scaffolding
index
config
database
dbutil
dbforge
file
helper
helpers
language
library
model
plugin
plugins
scaffolding
script
view
vars
_ci_assign_to_models
_ci_autoloader
_ci_init_class
_ci_init_scaffolding
_ci_is_instance
_ci_load
_ci_load_class
_ci_object_to_array
is_really_writable()
load_class()
get_config()
config_item()
show_error()
show_404()
log_message()
_exception_handler()
get_instance()
7、系统的保留变量:$config $mimes $lang
8、系统的保留常量:
EXT
FCPATH
SELF
BASEPATH
APPPATH
CI_VERSION
FILE_READ_MODE
FILE_WRITE_MODE
DIR_READ_MODE
DIR_WRITE_MODE
FOPEN_READ
FOPEN_READ_WRITE
FOPEN_WRITE_CREATE_DESTRUCTIVE
FOPEN_READ_WRITE_CREATE_DESTRUCTIVE
FOPEN_WRITE_CREATE
FOPEN_READ_WRITE_CREATE
FOPEN_WRITE_CREATE_STRICT
FOPEN_READ_WRITE_CREATE_STRICT
视图(view)
一个视图就是一个网页,或是网页的部分,如头部,底部,侧边栏等等。
视图从不直接调用,必须被一个控制器来调用。
1、视图文件保存位置:application/views/
2、视图文件的文件名:以.php作扩展名
3、在控制器类中载入视图:$this->load->view(‘name’); //其中的 name 便是你的视图文件的名字(如果视图文件存于子目录中,则还应包含子目录名,如:子目录1/试图文件名)。注意:.php 文件的扩展名(后缀名)没有必要专门写出,除非你使用了其他的扩展名。
4、向视图文件中传递数据:数据通过控制器以一个数组或是对象的形式传入视图 , 这个数组或对象作为视图载入函数的第二个参数(例如:$this->load->view(‘name’,array(‘title’=& amp; gt;’标题’,’content’=>’内容’)); )。当我们一次性载入多个视图的时候,只需在第一个视图传入数据就可以了。
5、获取视图的内容:将$this->load->view()函数的第三个参数设为“true”,比如:
$string = $this->load->view(‘myfile’, ”, true);
view方法中的第三个参数表示不输出视图,而只是将结果返回给一个变量。
模型(Model)
模型类的声明方式同控制器类。不同的只是
1、模型类文件保存位置:application/models/
2、模型类的父类名为:Model
3、调用方式不同:㈠控制器类是通过URL调用;㈡模型类是通过在控制器类中使用:
$this->load->model(‘Model_name’);
引用,引用的时候,第一个参数为模型类名(可能还含有子目录名);第二个参数为引用后赋予的新对象名;可以将第三个参数设置为TRUE(或包含数据库连接配置的数组)来使模型装载函数自动连接数据库。
辅助函数(helpers)
1、辅助函数文件保存位置:system/helpers 或 system/application/helpers
2、辅助函数文件名:yourname_helper.php(如果是你扩展的,就要加前缀“MY_”,或你自定义的前缀(application/config/config.php :$config['subclass_prefix'] = ‘MY_';))
3、载入单个辅助函数文件:$this->load->helper(‘辅助函数文件名’);//辅助函数文件名不包括“_helper.php”部分
4、载入多个辅助函数文件:$this->load->helper( array(‘辅助函数文件名1′, ‘辅助函数文件名2′, ‘辅助函数文件名3′) );
5、自动载入辅助函数文件:可以通过打开 application/config/autoload.php ,并往自动载入数组(autoload array)中增加辅助函数文件名来实现。
插件(plugins)
插件的工作方式几乎和辅助函数一模一样。它们最主要的区别在于插件文件一般只有一个函数,而辅助函数文件里面通常是一系列函数。辅助函数被看作系统核心的一部分,而插件通常是网友制作和分享的。
1、插件文件保存位置:system/plugins 或 system/application/plugins
2、插件文件的文件名:yourname_pi.php
3、载入单个插件:$this->load->plugin(‘插件名’);//插件名不包括“_pi.php”部分
4、载入多个插件:$this->load->plugin( array(‘插件名1′, ‘插件名2′, ‘插件名3′) );
5、自动载入插件:可以通过打开 application/config/autoload.php ,并往自动载入数组(autoload array)中增加插件来实现
类库(libraries)
1、类库文件保存位置:system/libraries(系统类库) 或 system/application/libraries(自定义类库)
2、自定义类库命名约定:类名和类文件名应保持一致,它们的首字母必须大写(如是扩展系统类库的类,要加前缀“MY_”,前缀可设置 application/config/config.php:$config['subclass_prefix'],注意:所有原始 CodeIgniter类库以 CI_ 作为前缀,所以请勿以CI_作为你自己的前缀.)
3、类文件的格式
㈠完全自定义的类:
㈡扩展系统类库的类:
class MY_Email extends CI_Email {
function My_Email()
{//如果你需要在类中使用构造函数,你必须在构造函数中显式继承母类构造函数:
parent::CI_Email();
}
}
当你在自定义类中想使用CodeIgniter原始类时,你可以这样做:
首先,定义CodeIgniter对象赋给一个变量:
$CI =& get_instance();//必须以引用的方式
一旦定义某个对象为一个变量,你就可以使用那个变量名取代$this:
$CI =& get_instance();
$CI->load->helper(‘url’);
$CI->load->library(‘session’);
$CI->config->item(‘base_url’);
etc.
数据库操作
1、初始化数据库类:也就是连接数据库操作
$this->load->database(‘数据库连接信息’,’是否(TRUE/FALSE)返回连接ID(可用于连接多数据库)’,’是否(TRUE/FALSE)启用Active Record类。默认为 TRUE’);//建立数据库连接
如果以上函数的第一个参数没有任何信息,它将会在系统指定的数据库配置文件中寻找。
数据库连接信息,可以是包含数据库连接配置的数组或DSN字符串。
连接例子1、数据库连接信息是包含数据库连接配置的数组:
$config['hostname'] = “localhost”;
$config['username'] = “myusername”;
$config['password'] = “mypassword”;
$config['database'] = “mydatabase”;
$config['dbdriver'] = “mysql”;
$config['dbprefix'] = “”;
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$config['cache_on'] = FALSE;
$config['cachedir'] = “”;
$config['char_set'] = “utf8″;
$config['dbcollat'] = “utf8_general_ci”;
$this->load->database($config);
连接例子2、数据库连接信息是DSN字符串:
$dsn = ‘dbdriver://username:password@hostname/database';
$this->load->database($dsn);
连接例子3、连接多数据库:
$DB1 = $this->load->database(‘group_one’, TRUE);
$DB2 = $this->load->database(‘group_two’, TRUE);
$DB1->query();//只能使用这种方式,不能使用$this->db->query()这种方式
$DB1->result();//同理
重新连接/保持连接有效:
$this->db->reconnect();
如果你的所有页面均要求初始化数据库类,你可以让它自动加载。
要启用“自动连接”,可在application/config/autoload.php文件中的library数组里添加database。
2、标准查询:
㈠多结果标准查询(对象形式):
$query = $this->db->query(‘SELECT name, title, email FROM my_table’);
if ($query->num_rows() > 0)//如果你的查询可能不返回结果,建议你使用num_rows()函数来测试查询结果
{
foreach ($query->result() as $row)
{
echo $row->title;//上面的result()函数返回一个包含对象的数组
echo $row->name;
echo $row->email;
}
}
echo ‘Total Results: ‘ . $query->num_rows();
㈡多结果标准查询(数组形式):
$query = $this->db->query(‘SELECT name, title, email FROM my_table’);
foreach ($query->result_array() as $row)
{
echo $row['title'];//上面的result_array()函数返回一个带下标的数组。
echo $row['name'];
echo $row['email'];
}
㈢单结果标准查询(对象形式)
$query = $this->db->query(‘SELECT name FROM my_table LIMIT 1′);
$row = $query->row();//row()函数返回一个对象
echo $row->name;
㈣单结果标准查询(数组形式)
$query = $this->db->query(‘SELECT name FROM my_table LIMIT 1′);
$row = $query->row_array();//row_array()函数返回一个数组
echo $row['name'];
3、快捷查询:
㈠快捷查询类能为我们提供快速取得数据的途径:
$query = $this->db->get(‘table_name’[,'每页的记录数(limit)','偏移值(offset)']);//执行SQL: SELECT * FROM table_name
foreach ($query->result() as $row)
{
echo $row->title;
}
$query = $this->db->get(‘mytable’, 10, 20);//执行SQL: SELECT * FROM mytable LIMIT 20, 10
$this->db->get_where(‘数据表名’,’WHERE从句数组’[,'每页的记录数(limit)','偏移值 (offset)']);//与$this->db->get();函数一样,只是它允许你在函数的第二个参数那里添加一个where从句数 组,从而不用使用db->where()这个函数
㈡SQL语句设置函数:
$this->db->select(‘SELECT部分(返回字段列表)’[,'是否(TRUE/FALSE)用反引号保护字段和表名']);//此函数允许你在SQL查询中设置SELECT部分
例如:
$this->db->select(‘title, content, date’);
$query = $this->db->get(‘mytable’);
$this->db->select_max(‘查询字段’[,'结果字段重命名']);//字段最大值
范例1:
$this->db->select_max(‘age’);
$query = $this->db->get(‘members’);//执行SQL: SELECT MAX(age) as age FROM members
范例2:
this->db->select_max(‘age’, ‘member_age’);
$query = $this->db->get(‘members’);//执行SQL: SELECT MAX(age) as member_age FROM members
$this->db->select_min(‘查询字段’[,'结果字段重命名']);//字段最小值。与select_max()相似, 你可以选择性地给出第二个参数,用来给结果字段重命名。
$this->db->select_avg(‘查询字段’[,'结果字段重命名']);//字段平均值
$this->db->select_sum(‘查询字段’[,'结果字段重命名']);//字段和值
$this->db->from(‘数据表名’);//使用了本函数后,就无需再指定$this->db->get(‘mytable’)函数中的参数了,直接使用$this->db->get();即可。
$this->db->join(‘数据表名’,’SQL关联表达式’[,'关联方式(left/right/outer/inner/left outer/right outer)']);
例如:
$this->db->select(‘*’);
$this->db->from(‘blogs’);
$this->db->join(‘comments’, ‘comments.id = blogs.id’);
$query = $this->db->get();
$this->db->where()函数允许你使用四种方法中的一种来设置WHERE子句:
①、简单的 key/value 方法: $this->db->where(‘name’, $name); //生成: WHERE name = ‘$name’
②、自定义 key/value 方法:可以在第一个参数中包含一个运算符,以便控制比较:
$this->db->where(‘name !=’, $name);
$this->db->where(‘id <‘, $id);
③、关联数组方法: 使用这个方法时你也可以在键名中包含运算符:
$array = array(‘name !=’ => $name, ‘id <‘ => $id, ‘date >’ => $date);
$this->db->where($array);
$array = array(‘name’ => $name, ‘title’ => $title, ‘status’ => $status);
$this->db->where($array);
④、自定义字符串: 手动编写子句:
$where = “name=’Joe’ AND status=’boss’ OR status=’active'”;
$this->db->where($where);
$this->db->where() 接受可选的第三个参数。如果你将它设置为 FALSE, CodeIgniter 将不会为你那些包含反勾号的字段名或表名提供保护。例如:$this->db->where(‘MATCH (field) AGAINST (“value”)’, NULL, FALSE);
$this->db->or_where()函数与$this->db->where()几乎完全相同,唯一的区别是本函数生成的子句是用 OR 来连接的:
$this->db->where(‘name !=’, $name);
$this->db->or_where(‘id >’, $id); // 生成: WHERE name != ‘Joe’ OR id > 50
$this->db->where_in(‘字段名’,’包含IN结构中项目的数组’);//生成一段 WHERE field IN (‘item’, ‘item’) 查询语句,如果合适的话,用 AND 连接起来(而相应的$this->db->or_where_in()函数使用 OR 连接)。
$this->db->where_not_in(‘字段名’,’包含IN结构中项目的数组’)函数生成一段 WHERE field NOT IN (‘item’, ‘item’) 查询语句,如果合适的话,用 AND 连接起来(而相应的$this->db->or_where_not_in()函数使用 OR 连接)。
$this->db->like(‘字段名 或 以字段名为键,匹配内容为值的数组’[,
'第一个参数是字段名时该字段所匹配的字符串',
'通配符(%)位置before/after/both(默认值)'])函数允许你生成 LIKE 子句。
①、简单 key/value 方式:
$this->db->like(‘title’, ‘match’); // 生成: WHERE title LIKE ‘%match%’
如果你多次调用本函数,那么这些条件将由 AND 连接起来(而相应的$this->db->or_like()函数使用 OR 连接)。
②、关联数组方式:
$array = array(‘title’ => $match, ‘page1′ => $match, ‘page2′ => $match);
$this->db->like($array); // WHERE title LIKE ‘%match%’ AND page1 LIKE ‘%match%’ AND page2 LIKE ‘%match%’
$this->db->not_like()函数与$this->db->like()几乎完全相同,唯一的区别是它生成 NOT LIKE 语句
$this->db->or_not_like()函数与not_like()几乎完全相同,唯一的区别是多个实例之间是用 OR 连接起来的
$this->db->group_by(‘字段名或包含多个字段名的一维数组’)允许你编写查询语句中的 GROUP BY 部分
$this->db->distinct()为查询语句添加 “DISTINCT” 关键字
$this->db->having(‘字段名、SQL表达式或数组’[,'字段值','是否转义'])允许你为你的查询语句编写 HAVING 部分。有两种语法形式,一个或两个参数都可以:
$this->db->having(‘user_id = 45′); // 生成: HAVING user_id = 45
$this->db->having(‘user_id’, 45); // 生成: HAVING user_id = 45
把多个值通过数组传递过去:
$this->db->having(array(‘title =’ => ‘My Title’, ‘id <‘ => $id)); // 生成: HAVING title = ‘My Title’, id < 45
如果你正在使用一个由CodeIgniter进行转义保护的数据库,为了避免内容转义,你可以传递可选的第三个参数,并将其设置为FALSE。
$this->db->or_having(‘字段名、SQL表达式或数组’[,'字段值','是否转义'])与 having() 函数几乎完全一样,唯一的区别是多个子句之间是用 “OR” 分隔的。
$this->db->order_by(‘排序的字段或ORDER BY子句’,’排序方式(asc(升序)或desc(降序)或random(随机))’)设置一个ORDER BY子句。
例如:
$this->db->order_by(“title”, “desc”); // 生成: ORDER BY title DESC
$this->db->order_by(‘title desc, name asc’); // 生成: ORDER BY title DESC, name ASC
多次调用本函数就可以排序多个字段:
$this->db->order_by(“title”, “desc”);$this->db->order_by(“name”, “asc”); // 生成: ORDER BY title DESC, name ASC
$this->db->limit(‘结果数量’[,'结果偏移量'])函数限制查询所返回的结果数量
$this->db->count_all_results(['数据表名'])允许你获得某个特定的Active Record查询所返回的结果数量。可以使用Active Record限制函数,例如 where(), or_where(), like(), or_like() 等等。范例:
echo $this->db->count_all_results(‘my_table’);// 生成一个整数,例如 25
$this->db->like(‘title’, ‘match’);
$this->db->from(‘my_table’);
echo $this->db->count_all_results();// 生成一个整数,例如 17
4、标准插入(insert)
$sql = “INSERT INTO mytable (title, name)
VALUES (“.$this->db->escape($title).”, “.$this->db->escape($name).”)”;
$this->db->query($sql);
echo $this->db->affected_rows();
5、快捷插入(insert)
㈠插入函数:
$this->db->insert(‘数据表名’,’关联数组或对象’);
$data = array(
‘title’ => $title,
‘name’ => $name,
‘date’ => $date
);
$this->db->insert(‘mytable’, $data); //第一个参数包含表名,第二个参数是一个包含数据的关联数组(也可以是一个对象)。
㈡SQL语句设置函数:
$this->db->set(‘字段名(或关联数组或对象)’,’字段值’[,'是否(TRUE/FALSE)转义'])函数使您能够设置inserts(插入)或updates(更新)值
6、更新数据
$this->db->update(‘数据表名’,’关联数组或对象’[,'WHERE子句或关联数组'])函数生成并执行一条update(更新)语句。例如:
$data = array(
‘title’ => $title,
‘name’ => $name,
‘date’ => $date
);
$this->db->where(‘id’, $id);
$this->db->update(‘mytable’, $data);
在进行更新时,你还可以使用上面所描述的 $this->db->set() 函数。
7、删除数据
$this->db->delete(‘表名或包含多个表名的数组’,’WHERE子句数组’);生成并执行一条DELETE(删除)语句。
$this->db->empty_table(‘表名’);生成并执行一条DELETE(删除)语句。例如:
$this->db->empty_table(‘mytable’); // 生成 DELETE FROM mytable
$this->db->truncate(['表名']);生成并执行一条TRUNCATE(截断)语句。
$this->db->from(‘mytable’);
$this->db->truncate();
$this->db->truncate(‘mytable’);
8、链式方法
链式方法允许你以连接多个函数的方式简化你的语法。范例:
$this->db->select(‘title’)->from(‘mytable’)->where(‘id’, $id)->limit(10, 20);
$query = $this->db->get();
链式方法只能在PHP 5下面运行。
9、Active Record缓存
缓存调用是累加的。如果你调用了两次有缓存的 select(),然后再调用两次没有缓存的 select(),这会导致 select() 被调用4次。有三个可用的缓存函数:
$this->db->start_cache() 开启缓存
$this->db->stop_cache() 停止缓存
$this->db->flush_cache() 清空缓存
能够被缓存的语句有: select, from, join, where, like, groupby, having, orderby, set
10、事务
CodeIgniter允许你在支持事务安全的数据库表中使用事务。在MySQL中,你需要用InnoDB或BDB表而不是更常用的MyISAM。大多数其它的数据库平台都原生支持事务。
CodeIgniter的事务方法:
$this->db->trans_start() 启用事务。要使用测试模式只需将$this->db->trans_start()函数的第一个参数设置为 TRUE 即可
$this->db->trans_complete() 完成事务。
$this->db->trans_off() 禁用事务。
$this->db->trans_strict(FALSE); 禁用严格模式。默认情况下, CodeIgniter 以严格模式运行所有事务。当严格模式被启用时, 如果你正在运行多组的事务, 只要有一组失败, 所有组都会被回滚。如果严格模式被禁用, 每一组都被视为独立的组, 这意味着其中一个组的失败不会影响其它组。
$this->db->trans_status() 事务状态,执行失败返回FALSE
$this->db->trans_begin() 手动运行事务
$this->db->trans_rollback() 回滚
$this->db->trans_commit() 执行提交
11、表数据
$this->db->list_tables() 获取表信息。返回一个包含当前连接数据库中所有表名称的数组
$this->db->table_exists(‘表名’) 判断表是否存在。返回布尔值:TRUE/FALSE。
12、字段数据
$this->db->list_fields(‘表名’)/$query->list_fields() 返回一个包含字段名称的数组
$this->db->field_exists(‘字段名’,’表名’) 判断字段是否存在。返回布尔值:TRUE/FALSE。
$this->db->field_data(‘表名’)/$query->field_data() 返回一个包含字段名称信息的对象数组。 如果这个函数支持您的数据库,它将会返回以下数据:
name – 列名称
max_length – 列的最大长度
primary_key – 1 如果此列被定义为主键
type – 指定列的数据类型
例1:
$fields = $this->db->field_data(‘table_name’);
foreach ($fields as $field)
{
echo $field->name;
echo $field->type;
echo $field->max_length;
echo $field->primary_key;
}
例2:
$query = $this->db->query(“YOUR QUERY”);
$fields = $query->field_data();
13、调用自定义函数
$this->db->call_function(‘没有mysql_前缀的函数名’[,'函数的参数1','参数2','参数 3',...]); 允许你用一个独立的方法来调用一些 CodeIgniter 中没有定义的PHP数据库函数. 你必须提供一个没有 mysql_ 前缀的函数名来作为第一个参数, 这个前缀会根据当前正在使用的数据库类型来自动添加。任何你需要添加的其它参数都放在第一个参数后面。
通常情况下, 你会需要提供一个 connection ID 或是一个 result ID, connection ID 可以这样来获得:
$this->db->conn_id;
result ID 则包含在一个结果集(result object)中, 你可以这样来获得它:
$query = $this->db->query(“SOME QUERY”);
$query->result_id;
14、数据库缓存
只有 读类型(read-type) (SELECT) 查询会被缓存,因为只有这种查询会产生结果集。并且下列方法不能和缓存搭配使用:
num_fields() 、field_names() 、field_data() 、free_result()
激活缓存的步骤:
㈠创建缓存目录;
㈡在文件 application/config/database.php 中设置缓存目录;
㈢激活缓存特性,可以在文件 application/config/database.php 中设置全局选项,也可以用下面的方法手动设置。
$this->db->cache_on() 开启缓存
$this->db->cache_off() 关闭缓存
管理您的缓存文件
缓存系统会在缓存存放目录中建立与被访问的URL所对应的子目录(由各个URI路由段组成目录名。例如网址www.111com.net /index.php/blog/comments组成的缓存目录名就是blogcomments),同时把缓存文件存放在那个子目录中。
由于缓存文件不会过期,您需要在您的应用程序中写入删除缓存操作的代码。
删除缓存的函数有两个:
$this->db->cache_delete() 删除缓存文件。如果您不使用任何参数,将根据目前的URI决定应该清除/更新什么位置的缓存.要删除非当前页面的数据库缓存,可是采 用$this->db->cache_delete(‘blog’,’comments’);
$this->db->cache_delete_all() 清除所有的缓存文件。
15、数据库维护
㈠初始化(载入数据库维护类):$this->load->dbforge();//一旦初始化,就可以使用$this->dbforge 对象访问类中函数
㈡创建数据库:$this->dbforge->create_database(‘数据库名’) 成功返回 TRUE,否则返回FALSE
㈢删除数据库:$this->dbforge->drop_database(‘数据库名’) 成功返回 TRUE,否则返回FALSE
㈣添加字段:$this->dbforge->add_field(‘字段信息数组或字段信息字符串’) 例外情况:$this->dbforge->add_field(‘id’);//添加字段名为id的INT(9)类型的自动递增主键
㈤添加主键:$this->dbforge->add_key(‘主键字段名或包含非主键字段名的数组’[,'是否(TRUE/FALSE) 是主键']) 可选的第二个参数如果被设置为TRUE,那么就会生成一个主键。请注意 add_key()后面必须调用 create_table()。如果第二个参数不设置,就是添加非主键。多列的非主键必须通过数组来传递,例如:
$this->dbforge->add_key(array(‘blog_name’, ‘blog_label’));
㈥创建表:$this->dbforge->create_table(‘表名’[,'是否(TRUE/FALSE)添加IF NOT EXISTS子句']);
㈦删除表:$this->dbforge->drop_table(‘表名’);
㈧重命名表:$this->dbforge->rename_table(‘原表名’, ‘新表名’);
㈨修改表:
添加列:$this->dbforge->add_column(‘表名’,’字段信息数组’)
删除列:$this->dbforge->drop_column(‘表名’,’列名(字段名)’)
修改列:$this->dbforge->modify_column(‘表名’,’字段信息数组’)
定义 字段信息数组:
在数组中必须包含与字段数据类型相关的“类型”键。例如,INT,VARCHAR,TEXT等等。许多数据类型(如 VARCHAR)还需要“约束”键。
可以使用的键/值:
type/类型INT,VARCHAR,TEXT等等:数据类型
constraint/长度值:约束,数据最大长度
unsigned/TRUE: 在字段定义中生成“UNSIGNED”。
default/值: 在字段定义中生成一个缺省值。
null/TRUE: 在字段定义中生成“NULL” 。没有这个,字段缺省为“NOT NULL”。
auto_increment/TRUE: 为字段生成自动增量标记。注意,字段类型必须支持自动增量标记,如整型。
例如:
$fields = array(
‘blog_id’ => array(
‘type’ => ‘INT’,
‘constraint’ => 5,
‘unsigned’ => TRUE,
‘auto_increment’ => TRUE
),
‘blog_title’ => array(
‘type’ => ‘VARCHAR’,
‘constraint’ => ‘100’,
),
‘blog_author’ => array(
‘type’ =>’VARCHAR’,
‘constraint’ => ‘100’,
‘default’ => ‘King of Town’,
),
‘blog_description’ => array(
‘type’ => ‘TEXT’,
‘null’ => TRUE,
),
);
16、数据库工具类
㈠初始化(载入数据库工具类):$this->load->dbutil();//一旦初始化完毕,你可以通过 $this->dbutil 对象来访问成员函数
㈡列出所有数据库名:array $this->dbutil->list_databases() 返回一个含有数据库名的一维数组
㈢优化数据表:bool $this->dbutil->optimize_table(‘表名’);
㈣修复数据库:bool $this->dbutil->repair_table(‘table_name’);//注意:此特性仅在MySQL/MySQLi数据库中可用。
㈤优化数据库:bool $this->dbutil->optimize_database();//注意:此特性仅在MySQL/MySQLi数据库中可用。
㈥从数据库结果集输出CSV格式内容:string $this->dbutil->csv_from_result($db_result) 第一个参数必须为查询结果集对象;第二和第三个参数允许你设置分隔符和换行符。默认使用tab(跳格)作为分隔符,使用“\n”作为换行符。
㈦从数据库结果集输出XML格式内容:string $this->dbutil->xml_from_result($db_result) 第一个参数是查询结果集对象,第二个参数为可选数组参数,数组包含配置参数。例如:
$this->load->dbutil();
$query = $this->db->query(“SELECT * FROM mytable”);
$config = array (
‘root’ => ‘root’,
‘element’ => ‘element’,
‘newline’ => “\n”,
‘tab’ => “\t”
);
echo $this->dbutil->xml_from_result($query, $config);
㈧备份数据库:string $this->dbutil->backup(['备份参数'])
用法:
$this->load->dbutil();
$backup =& $this->dbutil->backup();
$this->load->helper(‘file’);
write_file(‘/path/to/mybackup.gz’, $backup);
$this->load->helper(‘download’);
force_download(‘mybackup.gz’, $backup);
设置备份参数:
将一个包含了各项参数值的数组作为第一个函数参数传递给备份函数,就可以设置数据库备份的参数。例如:
$prefs = array(
‘tables’ => array(‘table1′, ‘table2′), // 包含了需备份的表名的数组.
‘ignore’ => array(), // 备份时需要被忽略的表
‘format’ => ‘txt’, // gzip, zip, txt
‘filename’ => ‘mybackup.sql’, // 文件名 – 如果选择了ZIP压缩,此项就是必需的
‘add_drop’ => TRUE, // 是否要在备份文件中添加 DROP TABLE 语句
‘add_insert’ => TRUE, // 是否要在备份文件中添加 INSERT 语句
‘newline’ => “\n” // 备份文件中的换行符,可使用的有”\n”, “\r”, “\r\n”
);
$this->dbutil->backup($prefs);
调试应用程序
激活调试器:$this->output->enable_profiler(TRUE);
禁用调试器:$this->output->enable_profiler(FALSE);
设定基准点:
$this->benchmark->mark(‘标记1′);
$this->benchmark->mark(‘标记2′);
echo $this->benchmark->elapsed_time(‘标记1′, ‘标记2′);//输出两个标记间的代码的执行时间
显示总的执行时间:
在模版文件中使用 benchmark->elapsed_time();?> 或 {elapsed_time}
显示内存消耗:
如果你的PHP在安装的时候被配置成–enable-memory-limit,你可以将下面的代码包含到视图文件中显示整个系统的内存使用量:
benchmark->memory_usage();?>
注意:这个函数只能在视图文件中使用.这个消耗量就是应用程序的全部内存消耗.
如果不喜欢使用纯PHP,另外一种备用的来显示内存使用量的方式是在视图文件中使用这个伪变量:{memory_usage}
管理应用程序
如果你要对application文件夹进行重命名, 你需要打开应用程序中的index.php文件,对变量$application_folder进行更改:
$application_folder = “application”;
视图文件中的PHP替代语法
自动短标记支持:=$variable?>
替代控制结构:
if,for,foreach,和 while 相应的关闭语法分别是:endif,endfor,endforeach,和 endwhile
if(…):
…
elseif(…):
…
else:
…
endif;
替代控制结构中将所有的左花括号“{”替换为冒号“:”;
删除了右花括号“}”;
以关闭语法加分号“;”结束。
安全
1、URI安全:URI 一般只包含下列内容:
字母和数字
波浪符: ~
句号: .
冒号: :
下划线: _
破折号: –
2、跨站脚本过滤(XSS Filtering):
$data = $this->input->xss_clean($data[,bool $is_image]);//当数据是图片文件时需将第二个参数设为true,图片安全则返回true否则返回false
如果你想让codeigniter自动处理POST或者COOKIE数据。你可以在application/config/config.php文件中设定:
$config['global_xss_filtering'] = TRUE;
3、使用GET,POST, COOKIE, 或SERVER数据:分别使用一下方法获得:
$this->input->get()
$this->input->post()
$this->input->cookie()
$this->input->server()
例如获得$_POST['something']的数据:$something = $this->input->post(‘something’);
$this->input->get_post()方法将会搜索POST和GET方式的数据流,首先以POST方式搜索参数1中的值,否则以GET方式搜索
以上除了$this->input->server()方法之外,它们都还有第二个参数用以设置是否进行跨站脚本过滤(XSS Filtering)。
比如:$this->input->get_post(‘some_data’, TRUE);
输入类除了上面几个之外还有:
$this->input->ip_address();//获取IP地址
$this->input->valid_ip($ip);//验证IP地址是否有效
$this->input->user_agent();//获取浏览器的user agent信息
4、表单验证:
为了进行表单验证,你需要这三样东西:
㈠、一个包含表单的视图文件。
开发规范
1、文件格式:文件应该采用无BOM的UTF-8编码,并用LF作为换行符。
2、PHP闭合标签:所有的php文件应该省略这个php闭合标签“?>”,并插入一段注释来标明这是文件的底部并定位这个文件在这个应用的相对路径。这样有利于你确定这个文件已经结束而不是被删节的。比如:
/* End of file myfile.php */
/* Location: ./system/modules/mymodule/myfile.php */
3、类和方法(函数)的命名规则:类名的首字母应该大写,构造方法的名称要与类名相同。如果名称由多个词组成,词之间要用下划线分隔,不要使用骆驼命名法。类中所有其他方法的名称应该完全小写并且名称能明确指明这个函数的用途,最好用动词开头。尽量避免过长和冗余的名称。
4、变量命名:变量名应该只包含小写字母和数字(不能以数字开头),用下划线分隔,并且能适当地指明变量的用途和内容。那些短的、无意义的变量名应该只作为迭代器用在for()循环里。
5、注释:
文档块注释:
/**
* Super Class
*
* @package Package Name
* @subpackage Subpackage
* @category Category
* @author Author Name
* @link http://www.111com.net
*/
行注释:使用行注释时,在大的注释块和代码间留一个空行。
5、常量:常量命名除了要全部用大写外,其他的规则都和变量相同。
6、特殊变量:TRUE, FALSE, 和 NULL关键字应该全部大写。
7、逻辑操作符: 在||、&&、!的前后都要加一个空格。
无论什么时候,在声明有参数的函数时,要给参数设定默认值。
我的博物馆故事 官方安卓版v1.61.2
我的博物馆故事是一款以消除为主题的经营养成类手游,在这里玩家
专业模拟飞行10 手机版v12.2.4
专业模拟飞行10安卓版是一款飞行休闲手游,顶尖的物理飞行引擎
动物起义战斗模拟器二琳同款 最新版v4.1.1
动物起义战斗模拟器是一个非常有趣的模拟类游戏,玩家可以召唤各
迷你世界七周年 安卓手机版v1.43.0
迷你世界7周年是一款由《迷你世界》官方推出的庆祝特别版本,在
劫后公司无限资源版 v1.0.5.1
劫后公司内置菜单版是游戏的破解版本,在该版本中为玩家提供了内