CodeIgniter使用数据库


像任何其他框架一样,我们需要经常与数据库进行交互,CodeIgniter使我们的工作变得轻松。它提供了丰富的功能来与数据库交互。

在本节中,我们将了解CRUD(创建,读取,更新,删除)功能如何与CodeIgniter配合使用。我们将使用 stud 表来选择,更新,删除和插入 stud 表中的数据。

表名: stud
roll_no int(11)
Name varchar(30)

连接到数据库

我们可以通过以下两种方式连接到数据库 -

  • 自动连接 - 可以使用文件application / config / autoload.php完成自动连接。 自动连接将为每个页面加载数据库。我们只需要添加数据库库如下所示 -
$autoload['libraries'] = array(‘database’);
  • 手动连接 - 如果您只需要某些页面的数据库连接,那么我们可以手动连接。 我们可以通过在任何类中添加以下行来手动连接到数据库。
$this->load->database();

在这里,我们没有传递任何参数,因为所有内容都在数据库配置文件application / config / database.php中设置

插入一条记录

要在数据库中插入记录,使用insert()函数,如下表所示

句法 insert([ _$ table =''_ [, _$ set = NULL_ [, _$ escape = NULL_ ]]])
参数
  • $ table string ) - 表名

  • $ set array ) - 一个字段/值对的关联数组

  • $ escape bool ) - 是否转义值和标识符

返回 成功为TRUE,失败为FALSE
返回类型 布尔

以下示例显示如何在 stud 表中插入记录。该$ DATA是在我们设定的数据,并插入此数据表中的数组 stud ,我们只需要这个数组传递给插入功能在2 次的说法。

$data = array(
   'roll_no' => ‘1’,
   'name' => ‘Virat’
);

$this->db->insert("stud", $data);

更新记录

要更新数据库中的记录, update() 函数与 set()where() 函数一起使用,如下表所示。该 set() 函数将设置数据进行更新。

句法 set( _$ key_ [, _$ value =''_ [, _$ escape = NULL_ ]])
参数
  • $ key mixed ) - 字段名称或字段/值对的数组

  • $ value 字符串 ) - 字段值,如果$ key是单个字段

  • $ escape bool ) - 是否转义值和标识符

返回 CI_DB_query_builder实例(方法链)
返回类型 CI_DB_query_builder

where() 函数将决定要更新的记录。

句法 其中( _$ key_ [, _$ value = NULL_ [, _$ escape = NULL_ ]])
参数
  • $ key mixed ) - 要比较的字段的名称或关联数组

  • $ value 混合 ) - 如果单个键与此值相比较

  • $ escape bool ) - 是否转义值和标识符

返回 DB_query_builder实例
返回类型 目的

最后, update() 函数将更新数据库中的数据。

句法 update([ _$ table =''_ [, _$ set = NULL_ [, _$ where = NULL [,$ limit = NULL_ ]]]])
参数
  • $ table string ) - 表名

  • $ set array ) - 一个字段/值对的关联数组

  • $ where string ) - WHERE子句

  • $ limit int ) - LIMIT子句

返回 成功为TRUE,失败为FALSE
返回类型 布尔
$data = array(
   'roll_no' => ‘1’,
   'name' => ‘Virat’
);

$this->db->set($data);
$this->db->where("roll_no", ‘1’);
$this->db->update("stud", $data);

删除记录

要删除数据库中的记录,使用delete()函数,如下表所示

句法 删除([ _$ table =''_ [, _$ where =''_ [, _$ limit = NULL [,$ reset_data = TRUE_ ]]]])
参数
  • $ table mixed ) - 从中​​删除的表格; 字符串或数组

  • $ where string ) - WHERE子句

  • $ limit int ) - LIMIT子句

  • $ reset_data bool ) - TRUE重置查询“写入”子句

返回 CI_DB_query_builder实例(方法链)或失败时为FALSE
返回类型

使用以下代码删除 stud 表中的记录。第一个参数表示要删除记录的表的名称,第二个参数决定要删除的记录。

$this->db->delete("stud", "roll_no = 1");

选择一个记录

要在数据库中选择记录,使用 get 函数,如下表所示

句法 get([ _$ table =''_ [, _$ limit = NULL_ [, _$ offset = NULL_ ]]])
参数
  • $ table string ) - 查询数组的表

  • $ limit int ) - LIMIT子句

  • $ offset int ) - OFFSET子句

返回 CI_DB_result实例(方法链接)
返回类型 CI_DB_result

使用以下代码从数据库中获取所有记录。第一条语句从“stud”表中提取所有记录并返回该对象,该对象将存储在$ query对象中。第二条语句使用$ query对象调用 result() 函数以将所有记录作为数组获取。

$query = $this->db->get("stud");
$data['records'] = $query->result();

关闭连接

通过执行以下代码可以手动关闭数据库连接 -

$this->db->close();

创建一个名为 Stud_controller.php 的控制器类,并将其保存在 application / controller / Stud_controller.php中

这里是一个完整的例子,其中所有上述操作都被执行。在执行以下示例之前,请按照本章开始时的说明创建数据库和表,并对存储在 application / config / database.php 中的数据库配置文件进行必要的更改

<? php
   class Stud_controller extends CI_Controller {

      function __construct() {
         parent::__construct();
         $this->load->helper('url');
         $this->load->database();
      }

      public function index() {
         $query = $this->db->get("stud");
         $data['records'] = $query->result();

         $this->load->helper('url');
         $this->load->view('Stud_view',$data);
      }

      public function add_student_view() {
         $this->load->helper('form');
         $this->load->view('Stud_add');
      }

      public function add_student() {
         $this->load->model('Stud_Model');

         $data = array(
            'roll_no' => $this->input->post('roll_no'),
            'name' => $this->input->post('name')
         );

         $this->Stud_Model->insert($data);

         $query = $this->db->get("stud");
         $data['records'] = $query->result();
         $this->load->view('Stud_view',$data);
      }

      public function update_student_view() {
         $this->load->helper('form');
         $roll_no = $this->uri->segment('3');
         $query = $this->db->get_where("stud",array("roll_no"=>$roll_no));
         $data['records'] = $query->result();
         $data['old_roll_no'] = $roll_no;
         $this->load->view('Stud_edit',$data);
      }

      public function update_student(){
         $this->load->model('Stud_Model');

         $data = array(
            'roll_no' => $this->input->post('roll_no'),
            'name' => $this->input->post('name')
         );

         $old_roll_no = $this->input->post('old_roll_no');
         $this->Stud_Model->update($data,$old_roll_no);

         $query = $this->db->get("stud");
         $data['records'] = $query->result();
         $this->load->view('Stud_view',$data);
      }

      public function delete_student() {
         $this->load->model('Stud_Model');
         $roll_no = $this->uri->segment('3');
         $this->Stud_Model->delete($roll_no);

         $query = $this->db->get("stud");
         $data['records'] = $query->result();
         $this->load->view('Stud_view',$data);
      }
   }
?>

创建一个名为 Stud_Model.php 的模型类,并将其保存在 application / models / Stud_Model.php

<?php
   class Stud_Model extends CI_Model {

      function __construct() {
         parent::__construct();
      }

      public function insert($data) {
         if ($this->db->insert("stud", $data)) {
            return true;
         }
      }

      public function delete($roll_no) {
         if ($this->db->delete("stud", "roll_no = ".$roll_no)) {
            return true;
         }
      }

      public function update($data,$old_roll_no) {
         $this->db->set($data);
         $this->db->where("roll_no", $old_roll_no);
         $this->db->update("stud", $data);
      }
   }
?>

创建一个名为 Stud_add.php 的视图文件并将其保存在 application / views / Stud_add.php

<!DOCTYPE html>
<html lang = "en">

   <head>
      <meta charset = "utf-8">
      <title>Students Example</title>
   </head>
   <body>
         <?php
            echo form_open('Stud_controller/add_student');
            echo form_label('Roll No.');
            echo form_input(array('id'=>'roll_no','name'=>'roll_no'));
            echo "<br/>";

            echo form_label('Name');
            echo form_input(array('id'=>'name','name'=>'name'));
            echo "<br/>";

            echo form_submit(array('id'=>'submit','value'=>'Add'));
            echo form_close();
         ?>
   </body>
</html>

创建一个名为 Stud_edit.php 的视图文件并将其保存在 application / views / Stud_edit.php

<!DOCTYPE html>
<html lang = "en">

   <head>
      <meta charset = "utf-8">
      <title>Students Example</title>
   </head>

   <body>
      <form method = "" action = "">

         <?php
            echo form_open('Stud_controller/update_student');
            echo form_hidden('old_roll_no',$old_roll_no);
            echo form_label('Roll No.');
            echo form_input(array('id''roll_no',
               'name''roll_no','value'$records[0]→roll_no));
            echo "
            ";

            echo form_label('Name');
            echo form_input(array('id''name','name''name',
               'value'$records[0]→name));
            echo "
            ";

            echo form_submit(array('id''sub mit','value''Edit'));
            echo form_close();
         ?>

      </form>
   </body>

</html>

创建一个名为 Stud_view.php 的视图文件并将其保存在 application / views / Stud_view.php

<!DOCTYPE html>
<html lang = "en">

   <head>
      <meta charset = "utf-8">
      <title>Students Example</title>
   </head>

   <body>
      <a href = "<?php echo base_url(); ?>
         index.php/stud/add_view">Add</a>

      <table border = "1">
         <?php
            $i = 1;
            echo "<tr>";
            echo "<td>Sr#</td>";
            echo "<td>Roll No.</td>";
            echo "<td>Name</td>";
            echo "<td>Edit</td>";
            echo "<td>Delete</td>";
            echo "<tr>";

            foreach($records as $r) {
               echo "<tr>";
               echo "<td>".$i++."</td>";
               echo "<td>".$r->roll_no."</td>";
               echo "<td>".$r->name."</td>";
               echo "<td><a href = '".base_url()."index.php/stud/edit/"
                  .$r->roll_no."'>Edit</a></td>";
               echo "<td><a href = '".base_url()."index.php/stud/delete/"
                  .$r->roll_no."'>Delete</a></td>";
               echo "<tr>";
            }
         ?>
      </table>

   </body>

</html>

application / config / routes.php 的路径文件中进行以下更改,并在文件末尾添加以下行。

$route['stud'] = "Stud_controller";
$route['stud/add'] = 'Stud_controller/add_student';
$route['stud/add_view'] = 'Stud_controller/add_student_view';
$route['stud/edit/(\d+)'] = 'Stud_controller/update_student_view/$1';
$route['stud/delete/(\d+)'] = 'Stud_controller/delete_student/$1';

现在,让我们通过访问浏览器中的以下URL来执行此示例。将yoursite.com替换为您的网址。

http://yoursite.com/index.php/stud