You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用CodeIgniter PHP框架以MVC格式实现图片存入MySQL数据库?

用CodeIgniter实现图片存入MySQL数据库(MVC模式)

1. 先建数据库表

首先在MySQL里创建存储图片的表,用LONGBLOB类型存图片二进制数据,同时记录文件名:

CREATE TABLE images (
    id INT AUTO_INCREMENT PRIMARY KEY,
    image_name VARCHAR(255) NOT NULL,
    image_data LONGBLOB NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

2. 编写模型(Model)

在application/models/下创建Image_model.php,负责数据库的增查操作:

<?php
class Image_model extends CI_Model {
    public function __construct() {
        parent::__construct();
        $this->load->database();
    }

    // 插入图片到数据库
    public function insert_image($data) {
        return $this->db->insert('images', $data);
    }

    // 根据ID获取图片
    public function get_image($id) {
        $query = $this->db->get_where('images', ['id' => $id]);
        return $query->row();
    }
}

3. 编写控制器(Controller)

在application/controllers/下创建Image_controller.php,处理上传请求、视图渲染和图片输出:

<?php
class Image_controller extends CI_Controller {
    public function __construct() {
        parent::__construct();
        $this->load->model('Image_model');
        $this->load->library('upload');
    }

    // 显示上传表单
    public function upload_form() {
        $this->load->view('upload_form');
    }

    // 处理图片上传并存入数据库
    public function upload_image() {
        // 配置上传规则
        $config['upload_path'] = './uploads/'; // 临时存储路径,可自定义
        $config['allowed_types'] = 'gif|jpg|png|jpeg';
        $config['max_size'] = 2048; // 2MB限制

        $this->upload->initialize($config);

        if (!$this->upload->do_upload('image')) {
            // 上传失败,返回错误信息
            $data['error'] = $this->upload->display_errors();
            $this->load->view('upload_form', $data);
        } else {
            // 上传成功,读取文件内容
            $upload_data = $this->upload->data();
            $image_file = fopen($upload_data['full_path'], 'r');
            $image_data = fread($image_file, filesize($upload_data['full_path']));
            $image_data = $this->db->escape_str($image_data);
            fclose($image_file);

            // 准备插入数据库的数据
            $insert_data = [
                'image_name' => $upload_data['file_name'],
                'image_data' => $image_data
            ];

            // 调用模型插入
            if ($this->Image_model->insert_image($insert_data)) {
                // 插入成功,跳转到显示页面(这里示例直接返回成功提示)
                echo "图片已成功存入数据库!<br><a href='" . base_url('image_controller/upload_form') . "'>继续上传</a>";
                // 可选:删除临时文件
                unlink($upload_data['full_path']);
            } else {
                echo "存入数据库失败,请重试!";
            }
        }
    }

    // 根据ID输出图片
    public function get_image($id) {
        $image = $this->Image_model->get_image($id);
        if ($image) {
            // 根据图片后缀设置Content-Type
            $ext = pathinfo($image->image_name, PATHINFO_EXTENSION);
            $mime_type = match($ext) {
                'jpg', 'jpeg' => 'image/jpeg',
                'png' => 'image/png',
                'gif' => 'image/gif',
                default => 'image/jpeg'
            };
            header("Content-Type: $mime_type");
            echo $image->image_data;
        } else {
            show_404();
        }
    }
}

4. 编写视图(View)

在application/views/下创建upload_form.php,提供上传表单和图片展示示例:

<!DOCTYPE html>
<html>
<head>
    <title>图片上传到数据库</title>
</head>
<body>
    <h2>上传图片</h2>
    <?php if(isset($error)) echo "<p style='color:red'>$error</p>"; ?>
    <form method="post" action="<?php echo base_url('image_controller/upload_image'); ?>" enctype="multipart/form-data">
        <input type="file" name="image" required>
        <br><br>
        <input type="submit" value="上传并保存到数据库">
    </form>

    <h3>已保存的图片示例(假设ID为1)</h3>
    <img src="<?php echo base_url('image_controller/get_image/1'); ?>" alt="示例图片" style="max-width:400px;">
</body>
</html>

注意事项

  • 确保./uploads/目录存在且有读写权限(如果用临时存储的话)
  • CodeIgniter的base_url需要在application/config/config.php中正确配置
  • 若图片较大,需调整MySQL的max_allowed_packet参数,避免插入失败

内容的提问来源于stack exchange,提问作者Renishali Batada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 02:30:49