CodeIgniter Interview Questions
Looking to crack your next PHP or CodeIgniter job interview? This guide covers 20+ advanced CodeIgniter interview questions with clear explanations and real-world code examples. Ideal for experienced developers preparing for backend development roles in 2025.
1. How can you create a custom library in CodeIgniter?
Explanation:
A custom library is useful when you want to encapsulate reusable logic.
Example: Create: application/libraries/My_library.php
class My_library { public function greet($name) { return "Hello, " . $name; } }
Load it in controller:
$this->load->library('my_library'); echo $this->my_library->greet('Developer');
2. How do you implement CSRF protection in CodeIgniter manually in an API context?
Explanation:
CSRF is enabled in config/config.php
. For APIs, you might want to handle it manually.
$config['csrf_protection'] = TRUE;
In views:
<input type="hidden" name="<?=$this->security->get_csrf_token_name();?>" value="<?=$this->security->get_csrf_hash();?>" />
3. Explain the use of base_url()
and site_url()
with differences.
Explanation:
-
base_url()
returns the root URL of your site. -
site_url()
generates a complete URL using routing.
Example:
echo base_url('assets/css/style.css'); echo site_url('user/profile');
4. How do you create REST APIs in CodeIgniter?
Explanation:
Use the CodeIgniter REST Server library (e.g., by Chris Kacerguis).
Example (Controller method):
public function users_get() { $users = $this->User_model->get_all(); $this->response($users, REST_Controller::HTTP_OK); }
5. How do you prevent SQL injection in CodeIgniter?
Explanation:
Use Active Record or Query Bindings.
Example:
$this->db->where('email', $email); $query = $this->db->get('users'); // OR $sql = "SELECT * FROM users WHERE email = ?"; $query = $this->db->query($sql, array($email));
6. How to use Middleware (like Laravel) in CodeIgniter?
Explanation:
Though not native in CodeIgniter 3, you can simulate middleware using Hooks or base controllers.
Example (Base controller check):
class MY_Controller extends CI_Controller { public function __construct() { parent::__construct(); // Simulate middleware if (!$this->session->userdata('logged_in')) { redirect('login'); } } }
7. How do you handle multi-language support in CodeIgniter?
Explanation:
CodeIgniter provides language
library.
Example:
// Load language $this->lang->load('message', 'french'); // Access language line echo $this->lang->line('welcome');
8. How to implement HMVC (Hierarchical MVC) in CodeIgniter?
Explanation:
You can implement HMVC using the MX_Controller
by loading a modular extension package.
Steps:
-
Download CodeIgniter HMVC package
-
Extend controllers from
MX_Controller
-
Use
Modules::run('module/function')
9. How do you cache query results in CodeIgniter?
Explanation:
Enable caching in database.php
and use cache_on
:
$this->db->cache_on(); $query = $this->db->get('users'); $this->db->cache_off();
Also supports file-based page caching:
$this->output->cache(10); // Cache for 10 minutes
10. How to handle 404 errors and create a custom error page in CodeIgniter?
Explanation:
Customize the 404 override in routes.php
:
$route['404_override'] = 'errors/page_missing';
Create a controller and view for Errors/page_missing
to show a user-friendly 404 page.
11. How do you use transactions in CodeIgniter to ensure data integrity?
Explanation:
CodeIgniter supports database transactions to handle operations like inserts/updates/deletes securely.
Example:
$this->db->trans_start(); $this->db->insert('orders', $order_data); $this->db->insert('order_items', $item_data); $this->db->trans_complete(); if ($this->db->trans_status() === FALSE) { // Rollback happened }
12. How can you use environment-based configuration in CodeIgniter?
Explanation:
Use different config files or logic for development, testing, and production.
Steps:
-
Set environment in
index.php
:
define('ENVIRONMENT', 'development');
-
In config:
if (ENVIRONMENT == 'development') { $config['base_url'] = 'http://localhost/'; } else { $config['base_url'] = 'https://production.com/'; }
13. How do you integrate a third-party PHP library in CodeIgniter?
Explanation:
Use application/libraries/
or use Composer.
Example:
require_once(APPPATH.'third_party/SomeLibrary.php'); $lib = new SomeLibrary();
Or via Composer:
composer require guzzlehttp/guzzle
Then autoload using:
require_once APPPATH . '../vendor/autoload.php';
14. How do you handle file uploads securely in CodeIgniter?
Explanation:
Use CodeIgniter’s file upload library and validate file type, size, and name.
Example:
$config['upload_path'] = './uploads/'; $config['allowed_types'] = 'jpg|png|gif'; $config['max_size'] = 2048; $this->load->library('upload', $config); if ($this->upload->do_upload('profile_pic')) { $data = $this->upload->data(); } else { echo $this->upload->display_errors(); }
15. How do you prevent direct script access in CodeIgniter?
Explanation:
By using:
defined('BASEPATH') OR exit('No direct script access allowed');
This ensures scripts run only via the CI controller.
16. How do you create pagination in CodeIgniter?
Explanation:
Use the pagination library and configure base URL, total rows, and per page.
Example:
$this->load->library('pagination'); $config['base_url'] = base_url('users/index'); $config['total_rows'] = $this->db->count_all('users'); $config['per_page'] = 10; $this->pagination->initialize($config); $data['users'] = $this->User_model->get_users($config['per_page'], $this->uri->segment(3));
17. How do you use .env
files or environment variables in CodeIgniter 4?
Explanation:
In CI4, .env
file allows secure environment-based configuration.
Example (.env):
app.baseURL = 'http://localhost:8080/' database.default.username = root
Then in code:
$db_user = getenv('database.default.username');
18. How to implement user authentication from scratch in CodeIgniter?
Explanation:
Use session-based login system.
Example:
// Login Controller if ($this->input->post()) { $user = $this->User_model->check_credentials($email, $password); if ($user) { $this->session->set_userdata('user_id', $user->id); redirect('dashboard'); } else { $this->session->set_flashdata('error', 'Invalid login'); } }
19. How to use AJAX with CodeIgniter for real-time form submission?
Explanation:
Send AJAX requests to CodeIgniter controller methods and return JSON.
JavaScript Example:
$.post("user/submit_form", {name: "John"}, function(response) { alert(response.status); }, 'json');
CodeIgniter Controller:
public function submit_form() { $name = $this->input->post('name'); echo json_encode(['status' => 'success', 'name' => $name]); }
20. How can you load multiple views inside a layout in CodeIgniter?
Explanation:
Create a layout view and load partials from controller.
Example:
// Controller $data['main_content'] = 'pages/about'; $this->load->view('layout', $data);
In layout view:
<!DOCTYPE html> <html> <head><title>My Site</title></head> <body> <?php $this->load->view($main_content); ?> </body> </html>