现在的位置: 首页 > 综合 > 正文

PHP框架CodeIgniter的数据库操作整理

2017年12月22日 ⁄ 综合 ⁄ 共 6174字 ⁄ 字号 评论关闭

 

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);

抱歉!评论已关闭.