數據庫的運算並非在控制類中進行的,而是在數據模型中,這樣他們就能夠在後面很容易地被反覆使用。數據模型就是對你的數據庫或其餘數據存儲方式進行取回、插入和更新的地方,它們的功能是展現你的數據(They represent your data)。php
1.$query = $this->db->query('SELECT name, title, email FROM my_table'); foreach ($query->result() as $row) { echo $row->title; echo $row->name; echo $row->email; } 2.
foreach ($query->result_array() as $row) { echo $row['title']; echo $row['name']; echo $row['email']; } 3.
if ($query->num_rows() > 0) 4.
$query = $this->db->query('SELECT name FROM my_table LIMIT 1'); $row = $query->row();//$row = $query->row_array();
echo $row->name; 你能夠傳遞參數以便得到某一行的數據。好比咱們要得到第 5 行的數據: $row = $query->row_array(5); 除此之外, 咱們還能夠使用下面的方法經過遊標的方式獲取記錄: $row = $query->first_row() $row = $query->last_row() $row = $query->next_row() $row = $query->previous_row() 5.
$sql = "INSERT INTO mytable (title, name) VALUES (".$this->db->escape($title).", ".$this->db->escape($name).")"; $this->db->query($sql);//$query = $this->db->get('table_name');
echo $this->db->affected_rows(); 6.
$data = array( 'title' => $title,
'name' => $name,
'date' => $date ); $this->db->insert('mytable', $data); // Produces: INSERT INTO mytable (title, name, date) VALUES ('{$title}', '{$name}', '{$date}')
7.
$this->db->escape() 8.
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?"; $this->db->query($sql, array(3, 'live', 'Rick')); //自動轉義
9. 該函數返回當前請求的字段數(列數): $query = $this->db->query('SELECT * FROM my_table'); echo $query->num_fields(); 10.
$query = $this->db->query('SELECT title FROM my_table'); foreach ($query->result() as $row) { echo $row->title; } $query->free_result(); // $query 將再也不可用
$query2 = $this->db->query('SELECT name FROM some_table'); $row = $query2->row(); echo $row->name; $query2->free_result(); // $query2 將再也不可用
11.
$this->db->insert_id() $this->db->affected_rows() $this->db->count_all(); $this->db->platform() $this->db->version() $this->db->last_query(); $this->db->insert_string(); $this->db->update_string(); 12.AR $this->db->get(); $query = $this->db->get_where('mytable', array('id' => $id), $limit, $offset); $this->db->select('title, content, date'); $query = $this->db->get('mytable'); $this->db->select_max('age');//min,avg,sum
$query = $this->db->get('members'); If you want to control where the wildcard (%) is placed, you can use an optional third argument. Your options are 'before', 'after' and 'both' (which is the default).
$this->db->like('title', 'match', 'before'); // Produces: WHERE title LIKE '&#xma;tch'
$this->db->like('title', 'match', 'after'); // Produces: WHERE title LIKE 'match%'
$this->db->like('title', 'match', 'both'); // Produces: WHERE title LIKE '&#xma;tch%'
$this->db->insert(); $this->db->update(); $this->db->delete(); $this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20); $query = $this->db->get(); $this->db->start_cache(); $this->db->select('field1'); $this->db->stop_cache(); $this->db->get('tablename'); // Results in: // SELECT `field1` FROM (`tablename`)
$this->db->select('field2'); $this->db->get('tablename'); // Results in: // SELECT `field1`, `field2` FROM (`tablename`)
$this->db->flush_cache(); $this->db->select('field2'); $this->db->get('tablename'); // Results in: // SELECT `field2` FROM (`tablename`)
13.事務 $this->db->trans_start(); $this->db->query('AN SQL QUERY...'); $this->db->query('ANOTHER QUERY...'); $this->db->query('AND YET ANOTHER QUERY...'); $this->db->trans_complete(); You can run as many queries as you want between the start/complete functions and they will all be committed or rolled back based on success or failure of any given query. Strict Mode By default CodeIgniter runs all transactions in Strict Mode. When strict mode is enabled, if you are running multiple groups of transactions, if one group fails all groups will be rolled back. If strict mode is disabled, each group is treated independently, meaning a failure of one group will not affect any others. Strict Mode can be disabled as follows:
$this->db->trans_strict(FALSE); Managing Errors If you have error reporting enabled in your config/database.php file you'll see a standard error message if the commit was unsuccessful. If debugging is turned off, you can manage your own errors like this: $this->db->trans_start(); $this->db->query('AN SQL QUERY...'); $this->db->query('ANOTHER QUERY...'); $this->db->trans_complete(); if ($this->db->trans_status() === FALSE) { // generate an error... or use the log_message() function to log your error } Enabling Transactions Transactions are enabled automatically the moment you use $this->db->trans_start(). If you would like to disable transactions you can do so using $this->db->trans_off(): $this->db->trans_off() $this->db->trans_start(); $this->db->query('AN SQL QUERY...'); $this->db->trans_complete(); When transactions are disabled, your queries will be auto-commited, just as they are when running queries without transactions. 14.$this->db->list_tables(); Returns an array containing the names of all the tables in the database you are currently connected to. Example: 返回一個正在鏈接的數據庫中全部表名稱的數組。例如: $tables = $this->db->list_tables();//fields foreach ($tables as $table) { echo $table; } $this->db->table_exists(); Sometimes it's helpful to know whether a particular table exists before running an operation on it. Returns a boolean TRUE/FALSE. Usage example: 。當想了解系統運行前某個表格是否存在時就變得很是有用。返回一個布爾值:TRUE/FALSE。例子: if ($this->db->table_exists('table_name'))//field
{ // some code...
} 15.查詢緩存 // Turn caching on
$this->db->cache_on(); $query = $this->db->query("SELECT * FROM mytable"); // Turn caching off for this one query
$this->db->cache_off(); $query = $this->db->query("SELECT * FROM members WHERE member_id = '$current_user'"); // Turn caching back on
$this->db->cache_on(); $query = $this->db->query("SELECT * FROM another_table"); $this->db->cache_delete('blog', 'comments'); $this->db->cache_delete_all() 16.dbutil(數據庫工具類) $this->load->dbutil() $dbs = $this->dbutil->list_databases(); foreach($dbs as $db) { echo $db; } if ($this->dbutil->optimize_table('table_name')) { echo 'Success!'; } if ($this->dbutil->repair_table('table_name')) { echo 'Success!'; } $result = $this->dbutil->optimize_database(); if ($result !== FALSE) { print_r($result); } $this->load->dbutil(); $query = $this->db->query("SELECT * FROM mytable"); echo $this->dbutil->csv_from_result($query); $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); $backup =& $this->dbutil->backup(); // Load the file helper and write the file to your server
$this->load->helper('file'); write_file('/path/to/mybackup.gz', $backup); // Load the download helper and send the file to your desktop
$this->load->helper('download'); force_download('mybackup.gz', $backup);