如何将文件图像存储到mysql(Codeigniter)

I tried to upload file images into mysql using Codeigniter

This is likely my upload view:

<label>Upload File</label>
    <input type="file" class="form-control" name="images">
</div>

I've done with image name, description, etc.

I tried to save it into database, just like normal input form.

The result, column "images" cannot be null. I have set column "images" with varbinary(3000)

Am I doing it wrong?

EDITED:

My Controller:

public function save(){
    $this->gallery_model->save_foto();
    $this->session->set_flashdata('msg','FOTO BERHASIL DI UPLOAD');
    redirect(base_url('gallery'));
}

My Model

<?php
class Gallery_model extends CI_Model {
      public function __construct() {
        parent::__construct();
      }

  public function save_foto(){
    $data['id']            = date('U');
    $data['nm_foto']       = $this->input->post('nm_foto');
    $data['username']      = $this->input->post('username');
    $data['tanggal']       = date('j F Y');
    $data['images']        = $this->input->post('images');
    $data['deskripsi']     = $this->input->post('deskripsi');
    $this->db->insert( 'gallery', $data );
  }
}

You can't directly upload image into database , Insert image path

For upload image form form add

enctype="multipart/form-data" 

in form .

For more help regarding image upload in codeigniter

Codeigniter Image Upload

You can store images but its not advisable.

The "correct" way to do it is to store the files somewhere on your server and store the URI in the database.

The problem is that images can be quite large, this can result in a big load on your database which is unnecessary. When you work on a larger scale project you may have multiple database that need to be synchronised, when you database is larger then it need to be you unnecessary slow down your network.

If you still want the image stored in the datebase, you can store it as an BLOB type. See the MySQL documenation

You can insert it then with the following example code

$data['image'] = file_get_contents($_FILES['image']['tmp_name']);

If someone met an error and getting tired just like me, here's the simple way and codes you can upload [images] into your assets folder

In Controller

public function upd_gallery(){
    $file = $this->input->post('img_name').".jpg";
    move_uploaded_file($_FILES['images']['tmp_name'], './wheretosave/etc/etc'.$file);
    redirect( base_url().'gallery');
}

Set application -> config -> routes

$route['gallery/upload2'] = 'gallery/upd_gallery';

Put this to your view

<?php
    $ff = './where-to-save/etc/'.$this->input->post('img_name').'.jpg';
?>
     <form  action="<?= base_url()?>gallery/upload2" method="post" enctype="multipart/form-data">
       <div class="form-group">
          <input type="text" class="form-control" name="img_name" required="required">
       </div>
       <div class="form-group">
          <input type="file" class="form-control" name="images">
       </div>
       <div class="form-group">
          <button type="submit" class="btn btn-common" value="Update"> Upload</button>
       </div>
     </div>
  </div>

Of course, this way is very simple. You just have to name your image and save it

Saving image in database is NOT good practice. You can use following code to store files on your server's file system.

$userfile= $this->input->post('userfile'); //gets image name only

if ($_FILES['userfile']['name'] != '') { //to check if you've selected any file 
    $path = './path/to/folder';
    $config['overwrite'] = FALSE;
    $config['encrypt_name'] = FALSE;
    $config['remove_spaces'] = TRUE;
    $config['upload_path'] = $path;
    $config['allowed_types'] = 'jpg|png|gif|jpeg';
    $config['max_size'] = '0';

    if (!is_dir($config['upload_path'])) 
    die("THE UPLOAD DIRECTORY DOES NOT EXIST");

    $this->load->library('upload', $config);

    if (!$this->upload->do_upload('userfile')) {
        return "UPLOAD ERROR ! " . $this->upload->display_errors();
    }
    else {
        $filepath = $this->upload->data();
        $doc_path = $filepath['file_name'];
        return $doc_path;
    }

}