[PHP]CodeIgniter学习手册(三):模型Model的介绍与简单案例
什么是模型? 模型是专门用来和数据库打交道的PHP类。例如,假设你想用CodeIgniter来做一个Blog。你可以写一个模型类,里面包含插入、更新、删除Blog数据的方法。 下面的例子将向你展示一个普通的模型类: ?class Blogmodel extends CI_Model { var $title = '
什么是模型?
模型是专门用来和数据库打交道的PHP类。例如,假设你想用CodeIgniter来做一个Blog。你可以写一个模型类,里面包含插入、更新、删除Blog数据的方法。
下面的例子将向你展示一个普通的模型类:
class Blogmodel extends CI_Model { var $title = ''; var $content = ''; var $date = ''; function __construct() { parent::__construct(); } function get_last_ten_entries() { $query = $this->db->get('entries', 10); return $query->result(); } function insert_entry() { $this->title = $_POST['title']; // 请阅读下方的备注 $this->content = $_POST['content']; $this->date = time(); $this->db->insert('entries', $this); } function update_entry() { $this->title = $_POST['title']; $this->content = $_POST['content']; $this->date = time(); $this->db->update('entries', $this, array('id' => $_POST['id'])); } } ?>
注意: 上面用到的函数是 Active Record 数据库函数.
备注: 为了简单一点,我们直接使用了$_POST。
不过,这不太好,平时我们应该使用输类:
$this->input->post('title');
剖析模型
模型类文件存放在 application/models/ 文件夹。 如果你愿意,可以在里面建立子文件夹。
最基本的模型类必须像这样:
class Model_name extends CI_Model { function __construct() { parent::__construct(); } }
Model_name 是模型类的名字。 类名的首字母必须大写,其他字母小写。并且确保你的类继承了基本模型类(Base Model Class)。
文件名应该是模型类名的小写版。比如,如果你的类是:
class User_model extends CI_Model { function __construct() { parent::__construct(); } }
application/models/user_model.php
模型可以在 控制器 中被引用。 就像这样:
$this->load->model('Model_name');
如果模型文件在子文件夹下,引用的时候要带上相对路径名。例如:如果你有一个模型 application/models/blog/queries.php。 下面的代码可以引用它:
$this->load->model('blog/queries');
模型一旦被载入,你就能通过下面的方法使用它:
$this->load->model('Model_name'); $this->Model_name->function();
在默认的情况下模型名称就直接被引入作为对象名,就如上面所示。当然,如果你愿意,可以起个更好记的对象名!那么,可以在加载模型函数中指定第二个参数来设定,例如:
$this->load->model('Model_name', 'fubar'); $this->fubar->function();
这里有个控制器的例子,加载一个模型,然后通过视图显示出来
class Blog_controller extends CI_Controller { function blog() { $this->load->model('Blog'); $data['query'] = $this->Blog->get_last_ten_entries(); $this->load->view('blog', $data); } }
自动载入模型
如果您需要一个在整个项目中都起作用的特定模型,您可以让 CodeIgniter 在初始化时自动装载它。实现的方法是打开 application/config/autoload.php 文件,然后在自动装载数组中添加上这个模型。
备注: 经过测试(以加载一个模型为例)自动加载模型和手动载入模型时,消耗的内存情况是一样的。
但是当加载模型越多消耗内存就会越大。自动加载模型是要牺牲内存消耗换取的,所以尽量不要自动加载不必要贯穿全站项目的模型!
当一个模型被载入时,它并不会自动连接数据库。以下方法可以使您连接数据库:
您可以使用标准方法来连接数据库(说明), 也可以通过控制器或者您的自定义模型。
您可以把第三个参数设置为TRUE来使模型装载函数自动连接数据库,连接配置可以在您的数据库配置文件中可以定义:
$this->load->model('Model_name', '', TRUE);
您可以手动设定第三个参数来载入您的自定义数据库配置:
$config['hostname'] = "localhost"; $config['username'] = "myusername"; $config['password'] = "mypassword"; $config['database'] = "mydatabase"; $config['dbdriver'] = "mysql"; $config['dbprefix'] = ""; $config['pconnect'] = FALSE; $config['db_debug'] = TRUE; $this->load->model('Model_name', '', $config);
下面是我在SAE中连接数据库使用的Model,封装了一些常用到的方法,比如Select,Insert等等。
class sae_sql_model extends CI_Model { var $mysql; var $sql; function __construct() { parent::__construct(); $this->mysql = new SaeMysql(); } /*MySQL的Select查询函数,函数的参数依次为: *1.表名-2.列名-3.开始的行数-4.查询的函数 */ function select_limit($table_name,$row_name,$start_row,$row_count) { $this->sql = "SELECT ".$row_name." FROM `".$table_name."` LIMIT ".$start_row.",".$row_count.""; $data = $this->mysql->getData($this->sql); return $data; } /*MySQL的Select查询函数,函数的参数依次为: *1.表名-2.列名-3.查询的列名-4.查询的目标 */ function select_where($table_name,$row_name,$where_row,$target_row) { $this->sql = "SELECT ".$row_name." FROM `".$table_name."` WHERE `".$where_row."`=" .$target_row; $data = $this->mysql->getData($this->sql); return $data; } /*MySQL的Insert插入函数,函数的参数依次为: *1.表名-2.插入数据的关联数组 */ function insert_into($table_name,$array_data) { //$tempKey和$tempValue两个数组临时存储插入的数据 $temp_key_string = ""; $temp_value_string = ""; //遍历取出关联数组中的数据并将其存储在字符串中 foreach($array_data as $key=>$value) { $temp_key_string .= "`".$key."`,"; $temp_value_string .= "'".$value."',"; } //除去末尾的逗号 $temp_key_string = substr($temp_key_string,0,-1); $temp_value_string = substr($temp_value_string,0,-1); //组装Insert的SQL语句 $this->sql = "INSERT INTO `".$table_name."` (".$temp_key_string.") VALUES (".$temp_value_string.");"; //运行Insert的SQL语句 $this->mysql->run_sql($this->sql); } //测试输出的函数 function select_output($array_data,$row_name) { foreach($array_data as $key=>$value) { echo $value[$row_name]; } } } ?>
下面是几个简单的调用的例子:
//连接数据库并返回查询结果 $sqlData = $this->sql_model->select_limit('Entries','*',0,10); //将数据库的结果传入data中 $data['query']=$sqlData; //使用变量$data向目标网页传入数据 $this->load->view('blog_view',$data);
Insert函数的调用例子:
//将要插入的数据存入关联数组中 $data_array['entry_id'] = $_POST['entry_id']; $data_array['body'] = $_POST['body']; $data_array['author'] = $_POST['author']; //执行SQL语句 $sqlData = $this->sql_model->insert_into('Comments',$data_array);

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

在PHP8 中,match表達式是一種新的控制結構,用於根據表達式的值返回不同的結果。 1)它類似於switch語句,但返回值而非執行語句塊。 2)match表達式使用嚴格比較(===),提升了安全性。 3)它避免了switch語句中可能的break遺漏問題,增強了代碼的簡潔性和可讀性。

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。
